gpt4 book ai didi

jsf - #{param} 上的 @ManagedProperty 在 @ViewScoped 中不起作用

转载 作者:行者123 更新时间:2023-12-02 07:58:47 26 4
gpt4 key购买 nike

我的 bean 有这个:

@ManagedBean
@ViewScoped
public class BookBean implements Serializable
{
@ManagedProperty(value = "#{param.id}") // does not work with @ViewScoped
private String id;

public void init()
{
id = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")
if (id != null) {
System.out.println("ID: " + id);
currentBook = bookService.find(id);
}
}

@PostConstruct
public void post()
{
// does not work with @ViewScoped
System.out.println("ID: " + id);
currentBook = bookService.find(id);
}

public String getId() {
return id;
}

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

目标 Facelet 具有以下内容:

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

通过测试,我注意到@ManagedProperty@PostConstruct仅适用于@RequestScoped bean。

对于@ViewScoped bean,我发现我必须这样做FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("id")获取id参数的值。

这是使用 @ViewScoped 获取请求参数值的唯一方法吗?

有什么想法吗?

最佳答案

View 范围比请求范围更宽。 @ManagedProperty 只能设置与托管 bean 范围相比具有相同或更宽范围的属性。

继续使用 <f:viewParam> <f:event> 。您不应该将它们嵌套在一起。

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

@ManagedBean
@ViewScoped
public class BookBean implements Serializable {

private String id;

public void init() {
if (id != null) {
currentBook = bookService.find(id);
}
}

// ...
}

<f:viewParam>将设置请求参数和 <f:event>设置这些参数后将执行监听器方法。

@PostConstruct在 View 作用域 bean 上也可以正常工作,但它仅在 bean 构造并设置所有依赖项注入(inject)后直接运行(例如 @ManagedProperty@EJB@Inject@Resource 等)。 <f:viewParam>但是此后设置该属性,因此它在 @PostConstruct 中不可用.

关于jsf - #{param} 上的 @ManagedProperty 在 @ViewScoped 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5687440/

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