有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

p:pdataTable/p:dataGrid/ui:repeat中的JavaP:commandButton不调用方法

我在Glassfish 3.1.1上使用Primefaces 3.1、JSF 2.1.6

我有很多命令按钮,它们工作得很好,但这一个不行,我也不知道为什么。javascript警报触发,但从未调用控制器方法

请注意,第一个commandbutton完全启动(Filter按钮),但datatable中的edit按钮不会启动。我尝试了ui:repeat而不是dataGrid,但这会产生相同的效果/问题。 我有很多其他带有commandbutton的数据表,但它们都工作得很好。。。奇怪

<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) 个答案

  1. # 1 楼答案

    啊啊,就像往常一样,经过半天的调整,我发布了这个问题,10分钟后我看到了这个问题

    问题是datatable没有包装在p:列中。它呈现为OK,但这会导致表单只进行提交,而不调用backingbean方法

    <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>