Вызов порядка 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>
См. также: