2012-02-18 100 views
2

我正在使用多個PrimeFaces <p:remoteCommand/> s來調用頁面上的各種動作偵聽器。在javascript調用中,我傳遞了參數。這些參數到達請求參數映射中。如何在託管bean中設置或注入請求參數?

現在,我可以從動作偵聽器本身的地圖中提取參數。但是,我希望行動聽衆不必這樣做。相反,他們應該檢查bean中適當的值是否爲空,並據此採取行動。

我想要將它集中在單個事件中,或者更好的是讓請求參數值以某種方式自動注入到bean中。

所以我的問題是:

  1. 有沒有辦法,我能處理到處理該請求的參數調用任何動作偵聽器之前的事件類型?
  2. 更好的是,有沒有辦法自動將請求參數注入到bean屬性中?

回答

3

如果託管bean是請求範圍的,那麼您可以使用@ManagedProperty。請求參數映射已經在#{param}可用的EL上下文中。

@ManagedProperty("#{param.foo}") 
private String foo; 

如果管理bean是在更廣的範圍,那麼你就不能使用@ManagedProperty這一點。但是,如果您使用CDI或可以使用它,則可以使用homegrow作爲註釋。

@Inject @HttpParam 
private String foo; 

爲JSF的替代管理豆在更廣的範圍是<f:viewParam>標籤。我只能從經驗中不能分辨出它是否可以與<p:remoteCommand>結合使用,但從理論上講它應該工作得很好。另見ViewParam vs @ManagedProperty(value = "#{param.id}")

+0

該bean是視圖的作用域。對不起,我假設它被我使用''這個事實所暗示,它提供了一種從javascript調用動作偵聽器然後更新部分頁面的方法。這種情況通常不會與請求範圍的bean一起使用。我已經開始使用每頁相位聽衆,但目前有點尷尬。 – 2012-02-18 03:29:16

+0

你最好的選擇就是''。 – BalusC 2012-02-18 03:30:57

+0

我開始閱讀ViewParam vs @ManagedProperty。首先,我不知道''可以用於編碼到URL中的參數以外的任何內容。其次,根據那篇文章,視圖參數在更新模型值階段中設置,這是應用請求值之後的兩個階段,我假設它是調用動作偵聽器的地方。我可能會離開......我會開始仔細閱讀。謝謝。 – 2012-02-18 03:35:17