CommandButton不能在JSF中工作?

时间:2014-10-16 20:14:15

标签: jsf

我有一个使用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页面。这是为什么?我的代码出了什么问题?

2 个答案:

答案 0 :(得分:2)

您正在使用Post-Redirect-Get模式。执行此操作时,JSF生命周期,特别是在阶段5调用应用程序中,它将检查操作的返回是否为空字符串,因为您尚未定义{{1的输出您action中的}}属性:

<h:commandButton>

JSF将在faces-config.xml中搜索此结果并触发导航规则(如果存在)。

考虑到这一点,您有3种选择:

  1. 将结果设置为有效的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>
    
  2. 创建一个合适的托管bean,它有一个返回与正确导航大小写匹配的String的方法:

    <h:commandButton value="Sign in" action="signin" />
    

    在Facelets中:

    @ManagedBean
    @RequestScoped
    public class FooBean {
        public String signin() {
            return "signin";
        }
    }
    
  3. 针对此案例的更合适的解决方案:不要使用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)

我相信你没有正确使用commandButton。

我认为这个问题可以帮到你:

Difference between h:button and h:commandButton