2012-06-16 47 views
0

我想在JSF中做一些簡單的事情,但由於某種原因我無法正常工作。 我想要的是發佈帶有GET參數的頁面中的表單信息,並在我提交表單時保存此GET參數。提交表單時請保持參數

<f:metadata> 
    <f:viewParam name="someId" value="#{someController.something}" converter="#{someConverter}" /> 
</f:metadata> 

這是我選擇綁定GET參數的方式,這在我做GET請求時工作正常。

而在同頁我有一個

<h:form> 
    <!-- (... various input ...) --> 
    <h:commandLink action="#{someController.create}" value="Create" /> 
</h:form> 

當我提交它,即使數據是正確的,我從來沒有讓我的「東西」不爲空。

用例很簡單,我有一對多的關係,我想訪問帶有id的「one」作爲GET參數,並在頁面和列表下方列出「many」,表格允許我在「許多」列表中添加一個新元素。

我想使它(當然)工作,並清潔可能,

有人能告訴我什麼是實現這一目標的最佳方式是什麼?

謝謝!

回答

1

要麼使SomeController@ViewScoped,使豆的生活,只要你有相同的看法互動,

@ManagedBean 
@ViewScoped 
public class SomeController { 
    // ... 
} 

或使用<f:param>UICommand成分通過GET參數通過

<h:commandLink> 
    <f:param name="someId" value="#{param.someId}" /> 
</h:commandLink> 
+0

我忘了提及我使用CDI而不是JSF作爲容器,因爲我聽說JSF容器已被棄用。我應該保留我的選擇還是使用ManagedBean?如果我堅持使用CDI,最好的方法是使用@SessionScoped?謝謝 –

+0

已棄用? :)廢話。它們仍然適用於不支持像Tomcat/Jetty /等盒子的CDI的準系統servlet容器。只有當你有一個支持CDI的容器,並且你想在其他Java EE工件(如servlet,過濾器,Web服務,EJB等)中注入託管bean時,CDI確實更容易使用。會話範圍絕對是錯誤的選擇。 CDI提供'@ ConversationScoped'作爲視圖範圍的替代品,但您需要自己開始和結束對話。 – BalusC

+0

在應用程序中同時使用ManagedBean和CDI還是僅使用一個?謝謝你的回答,這是清楚簡潔的,問題解決了! –