Jakarta ee 未记录时在侦听器中重定向
我试图在我的拦截器中使用@aroundInvoke,检查一些validationX以继续执行该方法,或者将用户重定向到特定的JSF页面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
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,并最终确定它是否是我的自定义异常。又是唐克斯!