2014-02-17 41 views
0

我使用JSF構建了一個CRUD Web應用程序,並創建了一個添加表單,用於創建一個持久化到數據庫的新實體。在成功保存時,我希望用戶能夠瀏覽到新創建實體的詳細信息將顯示的頁面。從支持bean中設置參數

更詳細的是,我要做的是創建一個導航規則,在成功保存用戶導航到「dilutionDetail.xhtml」。我使用「faces-navigation.xml」。這部分工作正常。

我的問題是,我需要傳遞一個參數,允許我獲取新創建的實體的ID。 Bellow是添加表單中的commandButton。

<p:commandButton value="Save" action="#{dilution.save()}"> 
    <f:actionListener binding="#{dilution.prepareForSave()}" /> 
</p:commandButton> 

dilution.save()被調用(這也成功返回「保存」在導航情況下使用)的實體被持續。 dilution是一個視圖範圍的託管bean。

保存看起來是這樣的:

public String save(){ 
    das.create(dilution); 

    return "saved"; 
} 

das.create(dilution)後一直被稱爲dilution實體將擁有,我想作爲一個參數傳遞的ID。我怎樣才能做到這一點?

回答

1

您需要使用自己的@ViewScoped託管bean備份「dilutionDetail.xhtml」。讓它接收視圖參數,這將是稀釋的id要負載:

<f:metadata> 
    <f:viewParam name="id" value="#{dilutionDetailBean.id}" /> 
    <f:event type="preRenderView" listener="#{dilutionDetailBean.loadDilution}"/> 
</f:metadata> 

有了這個代碼,你會得到你想要的ID集,後來,你可以從DB與loadDilution方法加載它。

現在,如何在保存時導航到它?只需使用隱式導航。

Integer id = das.create(dilution); 
return "dilutionDetail?id="+id; 

參見: