【问题标题】:Not getting 'Page Not Found' with JSF2.0使用 JSF2.0 未获得“找不到页面”
【发布时间】:2011-10-05 01:34:57
【问题描述】:

我正在尝试将 Javaee6 与 GlassFish3.1 结合使用。 我创建了一个 Web 项目(使用 JSF2.0),只有一个文件 one.xhtml

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html">
<h:head>
    <meta http-equiv="Content-Type"
        content="text/html; charset=ISO-8859-1" />
    <title>ONE</title>
</h:head>
<h:body>
    <h:form id="oneForm">
        <h:commandButton id="oneButton" value="To Two" action="two" />
    </h:form>
</h:body>
</html>

我没有添加 web.xml,因为它对于 javaee6 是可选的。 我添加了 faces-config.xml,以便默认 servlet 映射工作。 (只有顶部元素)

<faces-config version="2.0" .../>

当我点击页面上的命令按钮时,我预计会出现“找不到页面”错误。但是页面只是重新加载。如果我真的放了文件 two.xhtml,它可以正常工作,但是在它不存在的情况下,不会给出错误,这是我所期待的。

我错过了什么,一些配置吗?

提前致谢。

【问题讨论】:

    标签: jsf-2 java-ee-6


    【解决方案1】:

    这是意料之中的。 JSF 使用所谓的导航案例。如果它没有找到匹配的案例,它只会回发到同一个视图。这是在JSF 2.0 specification 中指定的(选择一个进行评估)。

    7.4.2 默认 NavigationHandler 算法

    ...

    默认 NavigationHandler 实现必须表现得好像它正在执行以下算法(尽管可以使用优化的实现技术):

    • 如果没有与 handleNavigation() 方法调用匹配的导航案例,则表明当前视图应重新显示。 从 JSF 2.0 开始,会出现 null 结果不是无条件地导致所有导航规则 跳过。

    • ...

    但是,当您通过web.xml 中的上下文参数将 JSF 项目阶段设置为开发时,

    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>  
        <param-value>Development</param-value>
    </context-param>
    

    然后单击该按钮应该会在回发中产生开发警告消息,

    • 无法找到匹配的导航案例,其中 from-view-id 为“/one.xhtml”,用于操作“二”,结果为“二”

    这样最终的开发人员错误至少会引起注意。

    【讨论】:

      猜你喜欢
      • 2011-03-18
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 2018-08-13
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多