Datatable(在TabView中)内的CommandButton的ActionListener方法不起作用

时间:2013-06-03 17:44:09

标签: jsf-2 primefaces commandbutton

我在Datatable中有一个CommandButton组件,它位于TabView组件中。 CommandButton组件的ActionListener方法不起作用。永远不会被解雇。

这是我的XHTML页面:

<p:dialog id="dlgView" widgetVar="wvDlgView"
    modal="true" closable="true" resizable="false">
    <p:outputPanel id="opViewUser">
    <h:form>
        <p:tabView id="tabViewUser">
            <p:tab title="DATOS PERSONALES">
                <p:dataTable id="dtUsuarios" rows="5" paginator="true"
                    selectionMode="single" selection="#{personController.system}">
                    ....
                    <p:column>

                        <p:commandButton value="Bloquear"  actionListener="#{personController.block}" />
                    </p:column>
                </p:dataTable>
            </p:tab>
        <p:tabView>
    </h:form>
    </p:outputPanel>
</p:dialog>

提前致谢:)

PD:PF 3.5,JSF(Mojarra)2.1.3,Tomcat:6.0.10

1 个答案:

答案 0 :(得分:1)

很抱歉没有发布完整的代码并稍后回答。无论如何,我认为已经没有必要,因为我解决了我的问题。更详细地解释问题:

我在标签组件上有一个与此类似的结构:

<p:tab>
<h:form id="formTab" prependId="false">
    <h:panelGrid columns="3">
        <p:outputLabel value="Sistema " for="sltSystem"/>
        <p:selectOneMenu id="sltSistema" required="true"
            value="#{personController.idSistema}" >
            <f:selectItems value="#{personController.listSistemas" 
                var="s" itemLabel="#{s.valor}" itemValue="#{s.id}"/>
        </p:selectOneMenu>

        <p:outputLabel value="Rol " for="sltRol"/>
        <p:selectOneMenu id="sltRol" required="true" 
            value="#{personController.idRol}" >
            <f:selectItems value="#{personController.listRoles}" 
                var="r" itemLabel="#{r.valor}" itemValue="#{r.id}"/>
        </p:selectOneMenu>
    </h:panelGrid>


    <p:dataTable id="dtUsersSystems" rows="5" paginator="true"
        value="#{personController.userSystems}" var="s" rowKey="#{s.id}" >

        <p:column headerText="SISTEMA">
            <h:outputText value="#{s.sistema}" />
        </p:column>

        <p:column headerText="ROL">
            <h:outputText value="#{s.rol}" />
        </p:column>

        <p:column headerText="ESTADO">
            <h:outputText value="#{s.estado}"/>
        </p:column>

        <p:column>

            <p:commandButton value="Bloquear" icon="ui-icon-cancel" actionListener="#{personController.blocked}"></p:commandButton>
        </p:column>
    </p:dataTable>
<h:form>
</p:tab>

正如您所见, sltSystem sltRol 组件在 required中有 true 属性。为此,当我点击按钮“Bloquear”时,没有调用其ActionListener方法,因为我应该在sltSystem和sltRol组件上选择一个值。

因此新的页面结构如下:

<p:tab>
<h:form id="formSelect" prependId="false">
    <h:panelGrid columns="3">
        <p:outputLabel value="Sistema " for="sltSystem"/>
        <p:selectOneMenu id="sltSistema" required="true"
            value="#{personController.idSistema}" >
            <f:selectItems value="#{personController.listSistemas" 
                var="s" itemLabel="#{s.valor}" itemValue="#{s.id}"/>
        </p:selectOneMenu>

        <p:outputLabel value="Rol " for="sltRol"/>
        <p:selectOneMenu id="sltRol" required="true" 
            value="#{personController.idRol}" >
            <f:selectItems value="#{personController.listRoles}" 
                var="r" itemLabel="#{r.valor}" itemValue="#{r.id}"/>
        </p:selectOneMenu>
    </h:panelGrid>
</h:form>
<h:form id="formDataTable" prependId="false">
    <p:dataTable id="dtUsersSystems" rows="5" paginator="true"
        value="#{personController.userSystems}" var="s" rowKey="#{s.id}" >

        <p:column headerText="SISTEMA">
            <h:outputText value="#{s.sistema}" />
        </p:column>

        <p:column headerText="ROL">
            <h:outputText value="#{s.rol}" />
        </p:column>

        <p:column headerText="ESTADO">
            <p:graphicImage value="#{s.estado}"/>
        </p:column>

        <p:column>

            <p:commandButton value="Bloquear" icon="ui-icon-cancel" actionListener="#{personController.blocked}"></p:commandButton>
        </p:column>
    </p:dataTable>
<h:form>
</p:tab>

selectonemenu组件的表单和数据表组件的其他表单。

感谢所有人:)