p:commandButton里面p:pdataTable / p:dataGrid / ui:repeat不调用方法

时间:2012-02-16 15:32:48

标签: java ajax jsf primefaces

我在Glassfish 3.1.1上使用Primefaces 3.1,JSF 2.1.6。

我有大量的命令按钮工作正常,但这一个没有,我无法弄清楚为什么。将触发javascript警报,但从不调用控制器方法。

请注意,第一个命令按钮完全触发(“过滤器”按钮),但数据表内的编辑按钮不会触发。我尝试使用ui:repeat而不是dataGrid,但这会产生相同的效果/问题。 我有很多其他带有命令按钮的数据表,但它们都工作正常......很奇怪。

<h:form id="memberships" prependId="false">
        <h:panelGrid columns="3">
            <h:outputLabel value="Filter on EPS" />
            <p:selectOneMenu value="#{epsMembershipViewController.selectedEps}"
                style="width:200px" effect="fold" editable="false" id="selectEps">
                <f:selectItem itemLabel="Select One" itemValue="" />
                <f:selectItems value="#{epsMembershipViewController.allEps}" />
            </p:selectOneMenu>
            <p:commandButton value="Filter"
                action="#{epsMembershipViewController.repopulateView}" ajax="false" />
        </h:panelGrid>
        <br />

        <p:dataGrid var="eps" value="#{epsMembershipViewController.ldapEpss}"
            columns="1">

            <h:outputLabel value="#{eps}"
                style="font-weight: bold;font-size: 14px;" />

            <p:dataTable var="ldapUser" id="id_#{eps}"
                value="#{epsMembershipViewController.getUsersByEpsFromLdap(eps)}"
                paginator="false" selectionMode="single" rowKey="#{ldapUser.name}"
                rowStyleClass="#{ldapUser.expired == 'Yes' ? 'expired' : null}">

                ....... columns



                <p:column style="width:20px">
                    <f:facet name="header">
                        <h:outputText value="" />
                    </f:facet>
                    <p:commandButton icon="ui-icon-extlink"
                        onclick="alert('this event does not work')" ajax="false"
                        action="#{epsMembershipViewController.edit()}" />
                </p:column>

            </p:dataTable>

            <br />
            <br />

        </p:dataGrid>
    </h:form>

Bean代码

public String edit(ActionEvent e) {

    log.debug("EDIT USER 22222 ");


    return "eps-search";
}

感谢您的帮助, 科恩

1 个答案:

答案 0 :(得分:1)

Aaarghh,经常在经过半天的调整后,我发布了这个问题,10分钟后,我发现了问题。

问题是数据表没有包装在p:列中。它呈现正常,但这导致表单只是在不调用辅助bean方法的情况下进行提交。

<p:dataGrid var="eps" value="#{epsMembershipViewController.ldapEpss}"
            columns="1">

            <p:column> THIS WAS NOT PRESENT !!!!

                <f:facet name="header">
                    <h:outputText value="#{eps}" />
                </f:facet>

                <p:dataTable var="ldapUser" id="id_#{eps}"
                    value="#{epsMembershipViewController.getUsersByEpsFromLdap(eps)}"
                    paginator="false" selectionMode="single" rowKey="#{ldapUser.name}"
                    rowStyleClass="#{ldapUser.expired == 'Yes' ? 'expired' : null}">

                                           ..... COLUMNS .........

                    <p:column style="width:20px">
                        <f:facet name="header">
                            <h:outputText value="" />
                        </f:facet>
                        <p:commandButton icon="ui-icon-extlink"
                            onclick="alert('this event does not work')" ajax="false"
                            action="#{epsMembershipViewController.edit()}" />
                    </p:column>

                </p:dataTable>

            </p:column>