我有一个使用JSF Framework的maven / web应用程序。
这是按钮的代码:
<h:form>
<h:commandButton id="button1" value="Sign in" class="btn btn-info navbar-btn navbar-right"/>
</h:form>
这是来自导航文件(faces-configx.xml
):
<navigation-case>
<from-outcome>button1</from-outcome>
<to-view-id>/pages/signin.xhtml</to-view-id>
</navigation-case>
当我点击按钮时,它不起作用,它不会带我到signin.xhtml页面。这是为什么?我的代码出了什么问题?
答案 0 :(得分:2)
您正在使用Post-Redirect-Get模式。执行此操作时,JSF生命周期,特别是在阶段5调用应用程序中,它将检查操作的返回是否为空字符串,因为您尚未定义{{1的输出您action
中的}}属性:
<h:commandButton>
JSF将在faces-config.xml中搜索此结果并触发导航规则(如果存在)。
考虑到这一点,您有3种选择:
将结果设置为有效的navitagion规则:
<h:commandButton id="button1" value="Sign in" action="" />
^-------^
not written, JSF assumes this
在Facelets中:
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>signin</from-outcome>
<to-view-id>logout.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
创建一个合适的托管bean,它有一个返回与正确导航大小写匹配的String的方法:
<h:commandButton value="Sign in" action="signin" />
在Facelets中:
@ManagedBean
@RequestScoped
public class FooBean {
public String signin() {
return "signin";
}
}
针对此案例的更合适的解决方案:不要使用Post-Redirect-Get模式,而是使用直接导航(Redirect-Get)到<h:commandButton value="Sign in" action="#{fooBean.signin}" />
(无需任何表格)。
<h:button>
上面的代码假定signin.xhtml文件存在于放置此代码的文件的相同路径中。这是:
<h:button value="Sign in" outcome="signin" />
答案 1 :(得分:-1)