Должен ли я использовать элемент f: event или action в PrettyFaces? - PullRequest
2 голосов
/ 26 ноября 2011

На данный момент я использую следующий код:

public void init() {
    question = questionBean.findQuestion(questionParamId);
}

Который вызывается этим:

<f:metadata>
    <f:viewParam name="id" value="#{questionShowBackingBean.questionParamId}" />
    <f:event type="preRenderView" listener="#{questionShowBackingBean.init}" />
</f:metadata>

Таким образом, URL-адрес: http://www.mycompany.com/show.xhtml?id=8

Теперь я начал использовать PrettyFaces и увидел элемент <action> в элементе отображения URL. Интересно, мог бы я написать <action>#{questionShowBackingBean.init}</action> вместо этого?

Если это так, я должен удалить элемент метаданных или использовать его вместо этого, потому что он может в будущем измениться от использования PrettyFaces? Наконец, где происходит вызов в элементе action? Происходит ли это раньше, чем слушатель у меня сейчас?

1 Ответ

2 голосов
/ 26 ноября 2011

Теги <f:event> и <action> кажутся очень похожими, но имеют несколько существенных различий, которые могут повлиять на ваше решение:

  1. <action> позволяет выполнять навигацию, возвращая строку навигации.
  2. <f:event> является родным JSF и позволяет вам оставаться переносимым, если вы хотите переключать средства перезаписи URL в будущем.
  3. <action> позволяет выбрать, на какой фазе вызывать действие, с помощью атрибута <action phaseId="..." />. <f:event> обычно всегда вызывается в одно и то же время во время RENDER_RESPONSE, после того, как он вам действительно понадобится, если вы используете эту информацию в методе действия JSF или на этапе INVOKE_APPLICATION.

По умолчанию <action> s вызываются после фазы RESTORE_VIEW, но, как я уже говорил, вы можете контролировать это самостоятельно.

Обычно я предпочитаю использовать <action>, потому что он работает без необходимости каких-либо <f:viewParam> элементов, а также позволяет мне перемещаться до того, как произойдет какая-либо обработка жизненного цикла (сохраняя вещи немного более безопасными).

...