Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee 未记录时在侦听器中重定向_Jakarta Ee_Jsf 2_Ejb_Interceptor - Fatal编程技术网

Jakarta ee 未记录时在侦听器中重定向

Jakarta ee 未记录时在侦听器中重定向,jakarta-ee,jsf-2,ejb,interceptor,Jakarta Ee,Jsf 2,Ejb,Interceptor,我试图在我的拦截器中使用@aroundInvoke,检查一些validationX以继续执行该方法,或者将用户重定向到特定的JSF页面 @AroundInvoke public Object myInterceptor(InvocationContext invocation) throws Exception { if(validationX){//it passes the validation so proceed return invocation

我试图在我的拦截器中使用@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”的字符串------我得到了转换错误(字符串转换为metod应该返回的内容)
  • FacesContext.getCurrentInstance().getExternalContext().dispatch(“/JSF.JSF”);----我使用getCurrentInstance方法获得nullPointerException
  • FacesContext.getCurrentInstance().getExternalContext().redirect(“/JSF.JSF”)-------相同的NullPointerException。
    • 使用HttpServletRequest和HttpServletResponse生成响应,但我得到了NullPointer异常

提前谢谢

javaee拦截器并不是为这个目的而设计的。它旨在决定是否继续调用当前的CDI/EJBbean方法(如果有必要,抛出异常以中止该方法),和/或控制/操作其返回值。它无意充当JSF控制器。为此,应该使用普通的JSF托管bean

或者,如果这涉及到异常情况,那么您应该抛出一个特定的异常,并在
web.xml
中注册一个
,正好针对该异常类型。如果您可以钩住特定的URL而不是特定的方法调用,那么另一种方法将是以简单的方式执行该工作


由于您认为这是正确解决方案的具体功能需求在问题中并不明确,因此无法给出更详细的答案

javaee拦截器并不是为这个目的而设计的。它旨在决定是否继续调用当前的CDI/EJBbean方法(如果有必要,抛出异常以中止该方法),和/或控制/操作其返回值。它无意充当JSF控制器。为此,应该使用普通的JSF托管bean

或者,如果这涉及到异常情况,那么您应该抛出一个特定的异常,并在
web.xml
中注册一个
,正好针对该异常类型。如果您可以钩住特定的URL而不是特定的方法调用,那么另一种方法将是以简单的方式执行该工作


由于您认为这是正确解决方案的具体功能需求在问题中并不明确,因此无法给出更详细的答案

该解决方案旨在保护某些EJB的某些方法,servlet过滤器已经启动并运行,以保护正在使用的地毯和URL。保护被调用方法的唯一方法是这样,等待另一个答案;如果没有,我会竖起大拇指。抛出一个特定的运行时异常,并为此配置一个
。尝试该解决方案时,我会遇到另一个复杂问题;当然这是正确的答案,但是我的自定义异常围绕EJBException或ServletException展开,有没有想过将其作为一个独立的异常抛出以在errorpage中捕获?
ServletException
不是问题。容器隐式地将其展开
EJBException
可以作为
new ServletException(e.getCause())
使用带有
try catch的servlet过滤器在
EJBException
上调用
FilterChain#doFilter()
来展开和重新打包。毕竟感谢您的帮助,正如您在最后建议的那样,我解析了try返回给我()的异常/Throwable,并最终确定它是否是我的自定义异常。又是唐克斯!该解决方案旨在保护某些EJB的某些方法,servlet过滤器已经启动并运行,以保护正在使用的地毯和URL。保护被调用方法的唯一方法是这样,等待另一个答案;如果没有,我会竖起大拇指。抛出一个特定的运行时异常,并为此配置一个
。尝试该解决方案时,我会遇到另一个复杂问题;当然这是正确的答案,但是我的自定义异常围绕EJBException或ServletException展开,有没有想过将其作为一个独立的异常抛出以在errorpage中捕获?
ServletException
不是问题。容器隐式地将其展开
EJBException
可以作为
new ServletException(e.getCause())
使用带有
try catch的servlet过滤器在
EJBException
上调用
FilterChain#doFilter()
来展开和重新打包。毕竟感谢您的帮助,正如您在最后建议的那样,我解析了try返回给我()的异常/Throwable,并最终确定它是否是我的自定义异常。又是唐克斯!