从辅助bean设置参数

时间:2014-02-17 10:51:59

标签: java jsf jpa

我使用JSF构建了一个CRUD Web应用程序,并创建了一个用于创建新实体的添加表单,该实体将持久保存到数据库中。在成功保存时,我希望用户导航到一个页面,其中将显示新创建的实体的详细信息。

更详细地说,我不想做的是创建一个导航规则,在成功保存的情况下,用户可以导航到“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 个答案:

答案 0 :(得分:1)

您需要使用自己的@ViewScoped托管bean支持“dilutionDetail.xhtml”。让它接收一个view参数,它将是你想要加载的稀释的id:

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

使用此代码,您将获得所需的ID设置,稍后,您可以使用loadDilution方法从DB加载它。

现在,保存时如何导航到它?只需使用隐式导航。

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

另见: