当表单包含在模板中时,不会调用menuitem actionListener

时间:2012-04-20 03:53:20

标签: templates jsf primefaces facelets

当我使用<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。造成这个问题的原因是什么?

1 个答案:

答案 0 :(得分:1)

如果您正在嵌套表单,就会发生这种情况。即当模板客户端已经有另一个<h:form>时。这在HTML中是非法的,因此未指定浏览器行为。有些浏览器只会发送外部表单的数据,其他浏览器则不会发送任何内容。如果JSF没有收到动作的参数name = value,那么它将不会调用任何内容。

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

另见: