p: commandButton ajax не вызывается внутри p: dataList - PullRequest
8 голосов
/ 20 июля 2011

Primefaces 2.2.1

Mojarra 2.1.2

У меня есть сложный метод в моем bean-компоненте jsf:

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

Перейдем к следующему простому случаю.При размещении этой идентичной кнопки внутри ap: 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 Ответ

10 голосов
/ 20 июля 2011

Проблема решена.

Нашел решение в здесь

Чтобы вызвать слушателя, компоненты внутри 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?

Связанные проблемы здесь .

...