2012-12-06 46 views
2

由JSF(@Managedbean)管理的requestcoped bean可以通過@ManagedProperty(「#{param.id}」)獲取請求參數的值。如何使用由CDI管理的bean獲取POST請求參數?

如果請求是GET請求,則可以使用f:viewParam獲取請求參數的值。

當bean被CDI託管(@Named)並且請求是POST請求時,是否有特殊的機制來獲取請求參數的值?我只知道Java代碼

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id"); 

回答

1

<f:viewParam>在POST請求中工作得很好。

您應該記住,這僅在應用請求值階段運行,而不是在渲染響應階段。所以,如果你實際上在一個動作方法上進行導航,並希望參數被設置爲目標頁面的視圖參數,那麼你就錯了。它只會在POST請求實際提交到的視圖上設置。

作爲證據,證明<f:viewParam>作品上POST爲好,這是一個測試片段:

<f:metadata> 
    <f:viewParam name="foo" /> 
</f:metadata> 
<h:form> 
    <h:commandButton value="submit"> 
     <f:param name="foo" value="bar" /> 
    </h:commandButton> 
</h:form> 
<p>foo: #{foo}</p> 

按提交按鈕會顯示foo: bar

您需要以不同的方式解決具體的功能需求。 As you didn't tell anything about the concrete functional requirement in your question,這是不可能給出詳細的答案。這裏至少有一些提示:

  1. @Inject目標bean,並設置爲操作方法時財產。
  2. 使用<f:setPropertyActionListener>
  3. 使用閃光燈範圍。
  4. 用查詢字符串中的參數發送重定向。
+0

非常感謝,你真了不起。我明白爲什麼我的代碼不工作,試圖使用f:viewParam來獲取由另一個頁面發送的POST請求的參數值。 – user1643352

+0

不客氣。 – BalusC

相關問題