2011-11-26 18 views
2

目前我使用下面的代碼:我應該在PrettyFaces中使用f:event或action元素嗎?

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元素中的調用發生在哪裏?它是否發生在我現在的聽衆面前?

回答

2

<f:event><action>標籤看起來很相似,但有可能會影響你的決定一些大的差異:

  1. <action>允許您通過返回導航串來進行導航。
  2. <f:event>是原生JSF,如果您希望在將來切換URL重寫工具,可讓您保持可移植性。
  3. <action>讓您選擇通過<action phaseId="..." />屬性調用動作的哪個階段。 <f:event>通常在RENDER_RESPONSE期間同時調用,如果您在JSF操作方法或INVOKE_APPLICATION階段中使用此信息,則確實需要調用它。

默認情況下,在RESTORE_VIEW階段之後調用<action>,但正如我之前所說的,您可以自己控制它。

通常我更喜歡使用<action>,因爲它可以在不需要任何<f:viewParam>元素的情況下工作,它還使我在任何生命週期處理髮生之前(保持一點安全性)導航。

+0

那麼你將如何綁定路徑參數呢?直接在bean上設置它們?或者你可以將它們作爲參數傳遞給動作方法嗎? – LuckyLuke

+0

我會按照你的建議使用PrettyFaces注入來綁定路徑參數。 – Lincoln

相關問題