在ViewScop上写入404,并在JavaJSF中显示错误文件而不重定向
如果在未发送重定向的情况下未找到ID,如何抛出错误在ViewScop上写入404,并在JavaJSF中显示错误文件而不重定向,java,error-handling,jsf-2.2,view-scope,Java,Error Handling,Jsf 2.2,View Scope,如果在未发送重定向的情况下未找到ID,如何抛出错误404 在我的ViewScop中,我进行了选择,并希望返回一个错误404,显示404错误页面(404.xhtml)的内容 我尝试了下面的方法,它为我提供了一个重定向到404.xhtml的302重定向: @PostConstruct 公共无效初始化(){ data=service.select(id.getValue()); 如果(数据==null){ FacesContext context=FacesContext.getCurrentInst
404
在我的ViewScop中,我进行了选择,并希望返回一个错误404
,显示404
错误页面(404.xhtml
)的内容
我尝试了下面的方法,它为我提供了一个重定向到404.xhtml的302
重定向:
@PostConstruct
公共无效初始化(){
data=service.select(id.getValue());
如果(数据==null){
FacesContext context=FacesContext.getCurrentInstance();
context.getExternalContext().setResponseStatus(404);
context.responseComplete();
试一试{
context.getExternalContext().redirect(“/404.xhtml”);
}捕获(IOEX异常){
}
}
}
实际上,如果我注释掉重定向,我会得到正确的错误代码,但是仍然会呈现被调用的xhtml
文件
这里最好的方法是什么?在SO中有很多答案,但我没有找到一个适合我的答案
编辑:这里是SO的一些其他答案,这是我在何处找到正确答案的建议:
- -只需设置404,而不显示404页面的内容
- -类似的答案来自
,再次没有显示我在
web.xml
中定义的404页面
- -这正是我要找的强>
我再次搜索并找到了正确答案:
解决方案是在一台计算机上使用
调度
public abstract void dispatch(字符串路径)抛出IOException
向指定的资源分派请求以创建此资源的输出
答复
Servlet:这必须通过调用
javax.servlet.ServletContext
methodgetRequestDispatcher(path)
,以及
对结果对象调用forward()
方法
如果对getrequestdisacher(path)
的调用返回null
,则发送
aServletResponse SC\u未找到
错误代码
参数:
path—指定资源的上下文相对路径,必须以斜杠(“/”)字符开头
抛出:
FacesException
-如果发生ServletException,则引发该异常
IOException
-如果发生输入/输出错误
现在我的解决方案是这样的:
@PostConstruct
公共无效初始化(){
data=service.select(id.getValue());
如果(数据==null){
试一试{
FacesContext context=FacesContext.getCurrentInstance();
ExternalContext=context.getExternalContext();
setResponseStatus(未找到HttpServletResponse.SC_);
externalContext.dispatch(“/404.xhtml”);
context.responseComplete();
}捕获(IOEX异常){
}
}
}
请将您在此处找到的答案添加到SO中,并解释它们如何无法解决您的问题,从而避免不必要的重做工作。