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,那么它不会调用任何东西

您需要删除其中一个表单,以便它们不再嵌套

另见:

您确定没有嵌套表单吗?(这在HTML中是非法的)非常感谢你们,我删除了表单,它就可以工作了:)啊,很好,我把它作为一个答案转发了。