<h:commandbutton>无法在<ui:define> </ui:define> </h:commandbutton>内部工作

时间:2014-03-06 09:46:58

标签: jsf-2 netbeans-7

我创建了一个名为loginRegisterTemplate.xhtml的facelet模板。当我在模板客户端中使用它并将其放入其中时,不会调用托管bean中的方法。没有模板,按钮工作正常。为什么会这样?

    <ui:composition template="resources/css/faceletsTemplates/loginRegisterTemplate.xhtml">
        <ui:define name="top">
            Login Page
        </ui:define>
        <ui:define name="content">
            <div align="center">
                <h:panelGrid columns="3" columnClasses="rightalign,leftalign,leftalign">

                    <h:outputLabel value="Username:" for="userName"/>
                    <h:inputText id="userName" label="Username" required="true" value="#{loginBean.userName}" />
                    <h:message for="userName" />

                    <h:outputLabel value="Password:" for="password"/>
                    <h:inputText id="password" label="Password" required="true" value="#{loginBean.password}" />
                    <h:message for="password" />
                </h:panelGrid><br/>

                <h:button value="Back to Home" outcome="home"/>
                <h:commandButton id="login" value="Login" action="#{loginBean.doLogin}"/>
            </div>
        </ui:define>
    </ui:composition>
</h:body>

另一方面,旁边的简单<h:button>工作正常。

这是我的模板文件的正文:

<h:body>
    <div id="top">
        <ui:insert name="top">Top</ui:insert>
    </div>
    <div id="content" class="center_content">
        <ui:insert name="content">Content</ui:insert>
    </div>
</h:body>

我看过这里:h:commandLink / h:commandButton is not being invoked但我找不到哪个问题。

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么h:commandButton无效?

您的问题是answer you have checked中的第1位。

  

UICommand和UIInput组件必须放在UIForm中   组件,例如<h:form>

为什么h:button正在运作?

来自h:button docs

  

呈现“按钮”类型的HTML“input”元素。的价值   组件呈现为按钮文本和结果   component用于确定由其激活的目标URL   的onclick。

所以......

JSF会将您的h:button outcome值放入将在onclick事件中执行的javascript函数中。但它会使用action方法执行表单提交时h:commandButton的{​​{1}},因此应该有一个表单要提交。