当我使用<p:menuButton>
时如下:
<div id="div_menutop">
<h:form id="form_top">
<p:menubar id="mnb_top" >
<p:submenu label="Help" icon="ui-icon-help">
<p:menuitem ajax="true" process="@this" id="mn_item_help" update="@form" value="Hướng dẫn" actionListener="#{topprocess.helpListener}"/>
</p:submenu>
</p:menubar>
<p:commandButton ajax="false" action="#{secuser.logout()}" value="Thoát" />
<p:commandButton ajax="true" actionListener="#{topprocess.helpListener}" value="Thoát" />
</h:form>
</div>
然后它可以工作,actionListener
被调用。
但是当我尝试将它放在模板组合中时如下:
<ui:composition>
<div id="div_menutop">
<h:form id="form_top">
<p:menubar id="mnb_top" >
<p:submenu label="Help" icon="ui-icon-help">
<p:menuitem id="mn_item_help" update="@form" value="Hướng dẫn" actionListener="#{topprocess.helpListener}"/>
</p:submenu>
</p:menubar>
</h:form>
</div>
</ui:composition>
然后永远不会调用actionListener
。造成这个问题的原因是什么?
答案 0 :(得分:1)
如果您正在嵌套表单,就会发生这种情况。即当模板客户端已经有另一个<h:form>
时。这在HTML中是非法的,因此未指定浏览器行为。有些浏览器只会发送外部表单的数据,其他浏览器则不会发送任何内容。如果JSF没有收到动作的参数name = value,那么它将不会调用任何内容。
您需要删除其中一个表单,以便它们不再嵌套。