gpt4 book ai didi

jsf - 将参数传递给 JSF 中的 View 作用域 bean

转载 作者:行者123 更新时间:2023-12-03 23:16:44 28 4
gpt4 key购买 nike

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

更新 1

这是第一次尝试使用 View 参数的代码片段。正如评论的那样,这是行不通的。该值作为请求参数传递,但在目标页面中该值为空。

表格页面:

<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>

详情页的Bean:
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

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

最佳答案

使用 View 参数是最适合您的情况的方法。您实际上并不需要执行 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 页面中,获取 View 参数并加载该汽车的信息:
<f:metadata>
<f:viewParam name="carId" value="#{carDetailBean.carId}" />
<f:event type="preRenderView" listener="#{carDetailBean.loadData}"/>
</f:metadata>

哪里 CarDetailBean#loadData只需加载您的汽车的信息以显示给定的 id,已经设置到 bean 中。

另见:
  • Difference between h:button and h:commandButton
  • What can <f:metadata>, <f:viewParam> and <f:viewAction> be used for?
  • 关于jsf - 将参数传递给 JSF 中的 View 作用域 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880027/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com