0

我试图在我的拦截器中使用@aroundInvoke,检查一些validationX以继续执行该方法,否则将用户重定向到特定的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”返回字符串 ----- 我得到转换错误(字符串到方法应该返回的任何内容)。
  • FacesContext.getCurrentInstance().getExternalContext().dispatch("/JSF.jsf"); ----- 我用 getCurrentInstance 方法得到 nullPointerException。
  • FacesContext.getCurrentInstance().getExternalContext().redirect("/JSF.jsf"); --------同样的NullPointerException。
    • 使用 HttpServletRequest 和 HttpServletResponse 生成响应,但我得到 NullPointer 异常。

提前致谢!

4

1 回答 1

3

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

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

由于您错误地认为这是正确解决方案的具体功能要求从问题中不清楚,因此无法给出更详细的答案。

于 2013-03-21T18:26:51.057 回答