繁体   English   中英

将参数传递给JSF中的视图范围bean

[英]Passing parameters to a view scoped bean in JSF

让我们想象一下,我的JSF 2应用程序中有两个页面:第一页显示一个对象表(汽车或其他),另一个页面能够显示一个特定对象的详细信息。 表页面位于请求范围内,因为每次用户请求时都应重新加载对象。 详细信息页面在视图范围内。 因此,当我单击表格内的对象时,该对象应显示在详细信息页面中。 通过重定向,我可以转到详细信息页面,但详细信息页面为空,因为生成了新的vew。 好吧,我可以将范围更改为会话但这会导致其他问题,所以我希望在视图范围内有详细信息页面。 有没有办法将参数传递给新生成的视图范围bean?

更新1

这是第一次尝试使用视图参数的代码片段。 评论说这不起作用。 该值作为请求参数传递,但在目标页面中,该值为null。

表格页面:

<h:button value="Go to details" outcome="targetPage">
     <f:param name="carId" value="This is a test" />
</h:button>

详情页面:

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

豆的详细信息页面:

private String id;

public String getId() {
    return id;
}

public void setId( String id ) {
    this.id = id;
}

public void loadData() {
    System.out.println( "Id: " + id );
}

更新2

我发现了自己的错误。 元数据部分位于模板文件中。 当我将标签放入主文件的详细信息页面时,它可以工作。 非常感谢你。

对于您的案例,使用视图参数是最合适的方式。 你真的不需要执行REDIRECT,而是一个普通的GET请求:

<h:button value="Go to details" outcome="carDetails">
    <f:param name="carId" value="#{currentCar.id}" />
</h:button>

这将指向您的地址: carDetails.xhtml?carId = 1

之后,在您的carDetails.xhtml页面中,抓住视图参数并加载该汽车的信息:

<f:metadata>
    <f:viewParam name="carId" value="#{carDetailBean.carId}" />
    <f:event type="preRenderView" listener="#{carDetailBean.loadData}"/>
</f:metadata>

其中CarDetailBean#loadData只是加载您的汽车的信息,以显示给定的ID,已经设置到bean中。

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM