如何评估在PostConstruct中显示哪个页面?

时间:2014-11-24 14:50:06

标签: jsf jsf-2

想象一下这种情况:

我有一个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方法必须无效,我需要重定向到相应的页面。

我该怎么做?

2 个答案:

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