Вызов порядка h: commandLink action и f: ajax listener

Вот моя разметка:

<h:commandLink value="#{partial}" action="#{hello.setCurrentPartial(partial)}">
    <f:ajax render="include" listener="#{hello.renderFragments}"/>
</h:commandLink>

Я попытался запустить эту страницу в Mojarra-2.2.8 (wildfly 8.2.0.Final встроенный) и MyFaces-2.2.7 (установлен как управляемый здесь). Удивительно, но когда ссылка нажимается, mojarra вызывает hello.renderFragments сначала, а затем hello.setCurrentPartial, но MyFaces принимает противоположный порядок, т.е. hello.setCurrentPartial вызывается первым.

Итак, мой вопрос заключается в том, есть ли определение порядка вызова действия и прослушивателя ajax в JSF Spec. Какая реализация правильна, если порядок определен?

Ответ 1

Согласно обсуждение EG, соглашение о поведении Моджары правильное, поскольку оно соответствует тому, как actionListener/action работает, Парень MyFaces создал issue, и он ожидал, что это будет исправлено для следующего выпуска MyFaces. И спецификация JSF должна быть более явной в этом, это будет работать.

В то же время, если вы хотите иметь такое же поведение в Mojarra и MyFaces, что и в порядке вызова метода, переместите <f:ajax listener> в <h:commandLink actionListener>.

<h:commandLink value="#{partial}" actionListener="#{hello.renderFragments}" action="#{hello.setCurrentPartial(partial)}">
    <f:ajax render="include" />
</h:commandLink>

См. также: