Templates 当表单包含在模板中时,不会调用menuitem actionListener
当我使用Templates 当表单包含在模板中时,不会调用menuitem actionListener,templates,jsf,primefaces,facelets,Templates,Jsf,Primefaces,Facelets,当我使用时,如下所示: <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="m
时,如下所示:
<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>
<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
。此问题的原因是什么?如果嵌套表单,则可能会发生这种情况。即,当模板客户端已经有另一个
时。这在HTML中是非法的,因此浏览器行为未指定。一些浏览器将只发送外部表单的数据,而其他浏览器将不发送任何数据。如果JSF没有收到操作的参数name=value,那么它不会调用任何东西
您需要删除其中一个表单,以便它们不再嵌套
另见: