p:commandButton ajax没有在p:dataList里面调用

时间:2011-07-20 12:35:23

标签: jsf-2 primefaces

Primefaces 2.2.1

Mojarra 2.1.2

我的jsf bean中有一个复杂的方法:

public void saySomething() {
   log.debug("SAY SOMETHING !");
}

jsf中的一个简单按钮:

<p:commandButton
   value="say something"
   process="@this" update="@none" action="#{timetableBean.saySomething}" />

单击该按钮,将导致我的简单记录:

DEBUG PhaseTracker - BEFORE PHASE INVOKE_APPLICATION 5
DEBUG TimetableBean - SAY SOMETHING !
DEBUG PhaseTracker - AFTER PHASE INVOKE_APPLICATION 5

让我们进入下一个简单的案例。 将相同的按钮放在p:dataList中时,如下所示:

<p:dataList id="groupUsers2" value="#{timetableBean.group.users}" var="user" itemType="circle" style="padding:0; margin: 0;">
   <p:commandButton
      value="#{user.data['selected'] ? 'V' : 'X'}"
      process="@this" update="@none" action="#{timetableBean.saySomething}" />
   <p:commandLink value="#{user.userId} - #{user.name}" process="@this" />
</p:dataList>

单击该按钮,将导致我的简单记录:

DEBUG PhaseTracker - BEFORE PHASE INVOKE_APPLICATION 5
DEBUG PhaseTracker - AFTER PHASE INVOKE_APPLICATION 5

没有调用saySomething()的方法!

我做错了什么?

1 个答案:

答案 0 :(得分:10)

问题解决了。

here

中找到解决方案

为了调用侦听器,p:dataList中的组件应该用p:column封装

<p:dataList id="groupUsers2" value="#{timetableBean.group.users}" var="user" itemType="circle" style="padding:0; margin: 0;">
  <p:column>
   <p:commandButton
      value="#{user.data['selected'] ? 'V' : 'X'}"
      process="@this" update="@none" action="#{timetableBean.saySomething}" />
   <p:commandLink value="#{user.userId} - #{user.name}" process="@this" />
  </p:column>
</p:dataList>

奇怪的是,我没有在文档中看到这一点,因为它没有指定p:列。也许它出现在primefaces 2.2.1 doc的勘误表中?

相关问题here