我应该在PrettyFaces中使用f:event或action元素吗?

时间:2011-11-26 12:59:49

标签: java jsf java-ee prettyfaces

目前我正在使用以下代码:

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>

因此网址为:http://www.mycompany.com/show.xhtml?id=8

现在我已经开始使用PrettyFaces,我已经看到了URL映射元素中的<action>元素,我想知道我是否可以编写<action>#{questionShowBackingBean.init}</action>代替?

如果是这样,我应该删除元数据元素,还是应该使用它,因为它可能在将来使用PrettyFaces?最后,action元素中的调用发生在哪里?它是在我现在的听众之前发生的吗?

1 个答案:

答案 0 :(得分:2)

<f:event><action>标签似乎非常相似,但有一些可能影响您决定的巨大差异:

  1. <action>允许您通过返回导航字符串来执行导航。
  2. <f:event>是原生JSF,如果您希望将来切换URL重写工具,可以保持便携性。
  3. <action>允许您选择通过<action phaseId="..." />属性调用操作的阶段。 <f:event>通常总是在RENDER_RESPONSE期间同时调用,如果您在JSF操作方法或INVOKE_APPLICATION阶段使用此信息,则确实需要它调用。
  4. 默认情况下,在RESTORE_VIEW阶段之后调用<action>,但正如我之前所说,您可以自己控制它。

    通常我更喜欢使用<action>,因为它可以在不需要任何<f:viewParam>元素的情况下工作,并且它还允许我在任何生命周期处理发生之前导航(保持事情更安全)。 / p>