未记录时在Interceptor中重定向

时间:2013-03-21 18:19:24

标签: java-ee jsf-2 ejb interceptor

我试图在我的拦截器中使用@aroundInvoke,检查一些validationX以继续执行该方法,或者将用户REDIRECT到特定的JSF页面。

@AroundInvoke
public Object myInterceptor(InvocationContext invocation) throws Exception {
        if(validationX){//it passes the validation so proceed
            return invocation.proceed();    
        }else{//it doesnt passes the validation so go to 
            //DO SOMETHING TO REDIRECT TO SPECIFIC JSF
        }

    }

我试过了:

  • 使用“JSF?faces-redirect = true”返回String -----我得到转换错误(字符串到metod应该返回的任何内容)。
  • FacesContext.getCurrentInstance()getExternalContext()调度( “/ JSF.jsf”)。。 -----我用getCurrentInstance方法得到nullPointerException。
  • FacesContext.getCurrentInstance()getExternalContext()重定向( “/ JSF.jsf”)。。 -------相同的NullPointerException。
    • 使用HttpServletRequest和HttpServletResponse生成响应但我得到NullPointer异常。

提前致谢!

1 个答案:

答案 0 :(得分:3)

Java EE拦截器不是故意的。它旨在用于决定是否继续调用当前CDI / EJB bean方法(如果需要,抛出异常以中止它),和/或控制/操纵其返回值。它并不打算充当JSF控制器。为此,应该使用普通的JSF托管bean。

或者,如果这涉及特殊情况,那么您应该抛出一个特定的异常并在<error-page>中注册web.xml的确切异常类型。如果您可以挂钩特定的URL而不是特定的方法调用,另一种方法是用简单的servlet filter来执行作业。

作为您incorrectly认为这是正确解决方案的具体功能要求,问题不明确,不能给出更详细的答案。

相关问题