我正在尝试使用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,它可以正常工作,但是在它缺席的情况下,不会给出错误,这是我期待的。
我错过了什么,有些配置?
提前致谢。
答案 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'
这样最终会让开发人员的错误得到关注。