1

在 JSF 2.1 中处理错误的正确方法是什么?我看过很多帖子提出了不同的建议,但我猜大多数是针对 JSF 的早期版本的。我只需要一个基本的错误处理来显示某些错误的某些错误页面和所有其他错误的一般错误页面。我对 2.1 的发现是将以下内容放入 web.xml:

<error-page>
    <error-code>404</error-code>
    <location>/faces/error.xhtml</location>
</error-page>

这个对吗?抛出错误的正确方法是什么?是否与:

throw new WebApplicationException(Response.Status.NOT_FOUND);

使用上述方法,错误会传播到 servlet 并记录在服务器中。有没有办法在不引发传播到 servlet 的异常的情况下处理错误?

4

1 回答 1

0

有没有办法在不引发传播到 servlet 的异常的情况下处理错误?

你可以使用ExternalContext#responseSendError()它。

externalContext.responseSendError(HttpServletResponse.SC_NOT_FOUND, "some message");
facesContext.responseComplete();

请注意,这并不特定于 JSF 2.1。这同样适用于 JSF 2.0 和更早版本。另请注意,这种做法通常不是处理异常的正常做法(例如,您实际上捕获了一个;错误页面不是预检查失败的结果,其中根本没有引发异常)。通常,您只需抛出异常和/或通过像throws在 JSF 操作方法中<error-page><exception-type>那样重新声明它并让它去web.xml处理它。只有 JSF ajax 请求的异常处理需要自定义ExceptionHandler实现,但那是另一回事。

于 2012-08-20T13:42:45.323 回答