我创建了一个名为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但我找不到哪个问题。
谢谢!
答案 0 :(得分:1)
为什么h:commandButton
无效?
您的问题是answer you have checked中的第1位。
UICommand和UIInput组件必须放在UIForm中 组件,例如
<h:form>
。
为什么h:button
正在运作?
呈现“按钮”类型的HTML“input”元素。的价值 组件呈现为按钮文本和结果 component用于确定由其激活的目标URL 的onclick。
所以......
JSF会将您的h:button
outcome
值放入将在onclick
事件中执行的javascript函数中。但它会使用action
方法执行表单提交时h:commandButton
的{{1}},因此应该有一个表单要提交。