没有使用JSF2.0获得“找不到页面”

时间:2011-07-14 06:00:05

标签: jsf-2 java-ee-6

我正在尝试使用GlassFish3.1的Javaee6。 我用一个文件 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,它可以正常工作,但是在它缺席的情况下,不会给出错误,这是我期待的。

我错过了什么,有些配置?

提前致谢。

1 个答案:

答案 0 :(得分:2)

这是预期的。 JSF使用所谓的导航案例。如果找不到匹配的大小写,它只会回发到同一个视图。这在JSF 2.0 specification中指定(选择一个用于评估)。

  

7.4.2默认NavigationHandler算法

     

...

     

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

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

  •   
  • ...

  •   

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

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

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

  
      
  • 无法找到与from-view-id'/ one.xhtml'匹配的导航案例,对于结果'two'的行动'two'
  •   

这样最终会让开发人员的错误得到关注。