2014-02-17 40 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; 

参见: