我认为范围的bean应该从请求URL上的init(@PostConstruct)访问值,并将其生命周期内存储。
我了解到,在为了从http请求获取值,我需要下面的代码:
@ManagedProperty("#{param.x}")
private int x;
这给了我的属性X的值。然而,我所能做的只有在请求范围豆那套把戏。 通过注射@ManagedProperty这个bean到我的豆也将无法正常工作。 那么,如何获得访问该bean鉴于作用域bean?
我认为范围的bean应该从请求URL上的init(@PostConstruct)访问值,并将其生命周期内存储。
我了解到,在为了从http请求获取值,我需要下面的代码:
@ManagedProperty("#{param.x}")
private int x;
这给了我的属性X的值。然而,我所能做的只有在请求范围豆那套把戏。 通过注射@ManagedProperty这个bean到我的豆也将无法正常工作。 那么,如何获得访问该bean鉴于作用域bean?
使用<f:viewParam>
在视图中。
<f:metadata>
<f:viewParam name="x" value="#{bean.x}" />
</f:metadata>
另一个优点是,它允许细粒度的转换和验证。
需要注意的是postconstruct在设定值不可用。 所以,如果你想进行基于价值的初始化,使用一个转换器或preRenderView听众。
我有同样的问题,我已经从编程检索值过成功FacesContext
:
@PostConstruct
public void init() {
String value = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(key);
}