目前我正在使用以下代码:
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
元素中的调用发生在哪里?它是在我现在的听众之前发生的吗?
答案 0 :(得分:2)
<f:event>
和<action>
标签似乎非常相似,但有一些可能影响您决定的巨大差异:
<action>
允许您通过返回导航字符串来执行导航。<f:event>
是原生JSF,如果您希望将来切换URL重写工具,可以保持便携性。<action>
允许您选择通过<action phaseId="..." />
属性调用操作的阶段。 <f:event>
通常总是在RENDER_RESPONSE期间同时调用,如果您在JSF操作方法或INVOKE_APPLICATION阶段使用此信息,则确实需要它调用。默认情况下,在RESTORE_VIEW阶段之后调用<action>
,但正如我之前所说,您可以自己控制它。
通常我更喜欢使用<action>
,因为它可以在不需要任何<f:viewParam>
元素的情况下工作,并且它还允许我在任何生命周期处理发生之前导航(保持事情更安全)。 / p>