1

我在 DataTable 中有一个 commandButton。但是,当我单击它时不会调用“动作”(与 actionListener 效果相同);我在服务器操作开始时添加了日志,但它从未显示。请注意,该按钮在数据列表之外时可以正常工作。

这是我的代码:

<h:form id="compSearchForm">
    <p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}">
        <p:column>
            <f:facet name="header">
                <h:outputLabel value="Title" />
            </f:facet>
            <h:outputText value="#{competency.title}" />
        </p:column>

        <p:column>
            <p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" />
        </p:column>
    </p:dataTable>
</h:form>

你知道问题可能是什么吗?

4

4 回答 4

1

我将您的按钮列代码与支持 bean 中的虚拟方法一起添加到我的现有代码中。当我按下它正常工作的按钮时,该方法被正确调用。这是我添加到数据表中的代码:

<p:column>
    <p:commandButton value="Go" id="actionButton" action="#{tableBean.buttonAction()}" />
</p:column>

这是我的支持 bean 中的 buttonAction 方法:

public void buttonAction()
    {
        int a = 0;
        for(int i = 0; i < 100; i++)
            a = i;
    }

我在这个方法上放了一个断点,所以我知道当我单击按钮时它会被调用。我更进一步,使用了您的数据表代码(使用我的数据源),当我按下按钮时,该方法仍在被调用。我不知道您使用的是什么开发环境,但如果它有调试模式,请在您的 doAction 方法上放置断点,以及 bean 中的其他一些战略位置,然后在调试模式下运行您的项目以查看发生了什么.

于 2010-12-30T16:41:57.317 回答
0

我认为您必须更改为:

<h:form id="compSearchForm">
<p:dataTable var="competency" value="#{competencySearchBean.matchingCompetencies.toArray()}">
    <p:column>
        <f:facet name="header">
            <h:outputLabel value="Title" />
        </f:facet>
        <h:outputText value="#{competency.title}" />
    </p:column>
</p:dataTable>
<p:commandButton value="Go" id="actionButton" action="#{myBean.doAction}" />
</h:form>

我认为您不能在 dataTable 中使用按钮。试试这个。

于 2010-12-27T10:14:57.130 回答
0

看到这个例子 - http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf

我认为您必须在 id 前面加上表单 ID

看看它是如何更新 ":form:display" 而不仅仅是 "display"

为我工作

于 2013-06-07T19:31:10.023 回答
0

我遇到了同样的问题,在尝试了不同的方法后,我通过List在.p:datatableinitBean

使用此表单,列表会转到包含一些值的页面。

即使我放List<Paciente> myList = new ArrayList<Paciente>();了它也没有用。我必须在列表中添加一些值。这是解决问题的唯一方法。

于 2015-10-01T18:30:55.510 回答