我对如何完成这项工作进行了一些研究,找到了一些孤立的解决方案,但我无法弄清楚如何将它们结合起来,以及最佳实践是哪种方式。我正在使用 tomcat 和 jsf 2.x。
场景:我有一个会话范围的 bean,mycontrollerA。控制器与 myviewa.xhtml 相关。在 viewA 上点击 commandLink 后,动作 mycontrollerA.doThis() 被触发。在这种方法中,我想使用 try-catch,如果发生异常,我想重定向到我的异常报告视图“exception.xhtml”。相关的控制器ExceptionController有一个属性'message',我想在myControllerA中设置相应的值。
问题:如果我尝试获取我的 exceptionController bean,则会出错。我想,它只是不存在,因为它从未被初始化。我希望有一种通用的方法可以从另一个 SessionScoped bean 中获取 SessionScoped bean,它可以开箱即用地处理这种“必要时创建”行为。此外,我认为我的重定向代码可以改进。
提前致谢。
public String doThis() {
try {
throw new RuntimeException("TestExc");
} catch (RuntimeException e) {
//ExceptionController exceptionController = (ExceptionController) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("exceptionController");
//exceptionController.setMessage("Fehlerinfo: " + e.getMessage());
try {
FacesContext.getCurrentInstance().getExternalContext().redirect("exception.xhtml");
} catch (IOException e1) {
e1.printStackTrace();
}
}
return null;
}
@ManagedBean(name = "exceptionController")
@SessionScoped
public class ExceptionController { ... }