Используйте теги JSF ajax и setPropertyActionListener на одной кнопке - PullRequest
0 голосов
/ 22 октября 2011

Мне бы хотелось, чтобы, когда пользователь нажимал на кнопку, происходили 2 вещи:

  1. Сначала срабатывает setPropertyActionListener, чтобы обновить свойство моего компонента
  2. ЗатемВызов ajax выполняется для выполнения метода из bean-компонента

Кажется, что я должен выбирать между тегом f:setPropertyActionListener и тегом f:ajax, чтобы вкладываться в тег commandButton.

Есть ли способ выполнить вызов ajax и обновление свойства одновременно?

Большое спасибо!

РЕДАКТИРОВАТЬ: я забыл упомянуть, я не хочу выполнения формы, Я хочу использовать слушатель ajax, вот мой код:

<h:commandLink styleClass="blue-button" value="+">
  <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" />
  <f:ajax event="click" listener="#{tvShowForm.add}" />
</h:commandLink>

С этим кодом f:setPropertyActionListener не выполняется.

РЕДАКТИРОВАТЬ 2:

Iизменил мой код на следующий, используя метод формы действия вместо слушателя.Теперь это работает, только если я не указываю атрибут события в теге ajax, но когда я его указываю, метод действия не выполняется.

<h:commandLink action="#{tvShowForm.add}" styleClass="blue-button" value="+">
  <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" />
  <f:ajax event="click" />
</h:commandLink>

1 Ответ

2 голосов
/ 22 октября 2011

Работает только для меня с Mojarra 2.1.3 на Tomcat 7.0.19 и Glassfish 3.1.1.

Я использовал этот соответствующий вид:

<h:form>
    <h:commandButton value="submit" action="#{bean.submit}">
        <f:setPropertyActionListener target="#{bean.value}" value="foo" />
        <f:ajax />
    </h:commandButton>
</h:form>

с этим соответствующим фрагментом боба:

private String value;

public void submit() {
    System.out.println("Value: " + value);
}

// Getter/setter.

, который печатает следующее на ajax submit:

Значение: foo

Ваша проблема вызвана чем-то другим, что вы оставили в вопросе.


Обновление : согласно вашему обновлению

Я забыл упомянуть, что не хочу выполнения формы, я хочу использовать слушатель ajax, вот мой код:

Я действительно не понимаю, почему вы не хотите "выполнение формы". Вы отправляете форму. Вы только исключили метод действия и вместо этого выполняете бизнес-работу в слушателе событий ajax. Методы прослушивателя действий не предназначены для выполнения какой-либо бизнес-задачи, они предназначены для как минимум некоторой автономной обработки или ведения журнала. Модельно-зависимая бизнес-работа должна выполняться в методе действия, вот для чего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...