我在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>
您是否知道问题可能是什么?
答案 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
它也没有用。
我必须在列表中放入一些值。这是解决问题的唯一方法。