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()的方法!
我做错了什么?
答案 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。