想象一下这种情况:
我有一个SessionScoped bean(名为TheSessionBean
),它是另一个bean的ManagedProperty(名为AnotherBean
)。
@ManagedBean
@ViewScoped
public class AnotherBean implements Serializable {
@PostConstruct
public void init() {
//Evaluate here!
}
@ManagedProperty(value = "#{theSessionBean}")
private TheSessionBean theSessionBean;
//Getter and Setter...
}
我需要评估ManagedProperty(theSessionBean
)的值,以便了解在没有用户互动的情况下以及在显示页面之前是否可以显示页面。
据我所知,这必须在PostConstruct方法中进行评估(因此我可以获得ManagedProperty的Session的值)。
TheSessionBean
只有一个名为permission的String属性。
首先,我需要知道是否:
theSessionBean.getPermission() == null
,以便重定向到名为one
theSessionBean.getPermission().equals("two")
,以便重定向到名为two
More evaluations...
问题是PostConstruct方法必须无效,我需要重定向到相应的页面。
我该怎么做?
答案 0 :(得分:1)
您可以在ExternalContext.redirect
方法中使用PostConstruct
。
if (someCondition)) {
ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
ec.redirect(ec.getRequestContextPath() + "/one");
}
答案 1 :(得分:0)
最佳做法是使用JSF系统事件 - PreRenderViewEvent PostConstructApplicationEvent PreDestroyApplicationEvent JSF events