【问题标题】:p:commandButton inside p:pdataTable/p:dataGrid/ui:repeat does not invoke methodp:commandButton 里面 p:pdataTable/p:dataGrid/ui:repeat 不调用方法
【发布时间】:2012-02-16 15:32:47
【问题描述】:

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

豆码

public String edit(ActionEvent e) {

    log.debug("EDIT USER 22222 ");


    return "eps-search";
}

感谢您的帮助, 科恩

【问题讨论】:

  • 尽量缩短你的例子。这样做时,您有很好的机会找出您的问题。否则我们有更好的机会在您的示例中找到相关的代码行。
  • 根据我(已删除)答案中的 OP 的 cmets,原因原来是 &lt;p:dataGrid&gt; 中缺少 &lt;p:column&gt;

标签: java ajax jsf primefaces


【解决方案1】:

啊啊啊,和以往一样,经过半天的调整,我发布了这个问题,10 分钟后我发现了问题。

问题是数据表没有包含在 p:column 中。它呈现正常,但这导致表单只是提交而不调用支持 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>

【讨论】:

  • 太棒了,我遇到了完全相同的问题。提醒自己,先检查stackoverflow,避免浪费3个小时的时间
猜你喜欢
  • 2012-05-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2012-01-02
  • 2012-11-29
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多