2

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

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 并且我已经看到了<action>URL-mapping 元素中的元素,我想知道我是否可以改写<action>#{questionShowBackingBean.init}</action>

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

4

1 回答 1

2

和标签看起来非常相似<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>元素就可以工作,而且它还可以让我在任何生命周期处理发生之前导航(让事情更安全一些)。

于 2011-11-26T15:41:37.713 回答