JSF - p:dataTable - p:commandButton即使在p:列中也不起作用

时间:2010-12-27 09:20:45

标签: jsf datatable primefaces

我在DataTable中有一个commandButton。但是当我点击它时不会调用“action”(与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 个答案:

答案 0 :(得分:1)

我将你的按钮列代码添加到我的现有版本中,并通过支持bean添加了一个虚拟方法。当我按下按钮它正常工作时,正确调用该方法。这是我添加到dataTable中的代码:

<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中的一些其他战略位置都设置了断点,那么在调试模式下运行你的项目以查看发生了什么

答案 1 :(得分: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中有按钮。试试这个。

答案 2 :(得分:0)

请参阅此示例 - http://www.primefaces.org/showcase/ui/datatableRowSelectionByColumn.jsf

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

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

为我工作

答案 3 :(得分:0)

我遇到了同样的问题,在尝试了不同的方法之后,我通过在List方法中初始化p:datatable(我在init中使用的列表)解决了这个问题。 {1}}。

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

即使我放Bean它也没有用。 我必须在列表中放入一些值。这是解决问题的唯一方法。