当FacesContext不可用时,如何处理@PostConstruct中的RuntimeException?

时间:2013-06-17 13:26:43

标签: jsf cdi runtimeexception

在我的应用程序中,我通过servlet接收用户名/密码,该servlet调用SessionScoped ServiceBean,它在@PostConstruct方法中初始化SSH连接。如果SSH主机不可用,我想将用户重定向到“/applicationerror.html”。因此,我在此方法中抛出RuntimeException。

在我的PostConstruct方法中,由于FacesContext为null,因此JSF ExceptionHandler都不会捕获我的异常,也不能通过FacesContext.getInstance()。getExternalContext()。redirect()重定向用户。

我可以做些什么来避免http 500?

public class LoginServlet extends HttpServlet {

   @Inject
   private AnyBean anyBean;

   doPost() {
      anyBean.loginUser(requestparamusercode, requestparampassword)
   }
}

@Named
@SessionScoped
public class AnyBean implements Serializable  {

   @Inject
   private SshService sshService;

   public boolean loginUser(String usercode, String password) {
      sshService.login(usercode, password);
   }

@SessionScoped
public class CommandServiceImpl  {

   public boolean login(usercode, password)  {
      ....
   }

   @PostConstruct
   private void initSshConnection() {
      try {
      } catch(IOException e) {
     // what to do here
   }
}
}

1 个答案:

答案 0 :(得分:0)

听起来你必须捕获异常并在catch块中使用RequestDispatcher。