我的首个 J2EE 6 应用程序。我正在使用焊料 ExceptionHandler 来处理异常,但我不太喜欢它。对于我想做的事情来说,这似乎太复杂了。
例如
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jboss.solder.exception.control.CaughtException;
import org.jboss.solder.exception.control.Handles;
import org.jboss.solder.exception.control.HandlesExceptions;
/**
* Handle exceptions and redirect page.
*/
@HandlesExceptions
public class ExceptionHandlers {
void noResult(
@Handles CaughtException<dne.nmst.ond.exceptions.OfficeNotFoundException> caught,
HttpServletRequest request, HttpServletResponse response) {
caught.handled();
try {
String msg = caught.getException().getMessage();
response.sendRedirect(request.getContextPath()
+ "/searchOffice.xhtml");
} catch (IOException e) {
e.printStackTrace();
}
}
我想在 searchOffice.xhtml 中显示来自 OfficeNotFoundException 的错误消息。我如何从这里到那里?
我考虑的一件事是将错误放入闪存上下文中,但是当我尝试从这个异常处理类中引用 FacesContext 时,我得到了 NPE。
我在 web.xml 中尝试了一个错误页面条目。我无法让它工作。
我知道我可以将它作为重定向中的请求参数传递,但这似乎是一种解决方法。我想用最简单和“最正确”的方式来做(不管那是什么意思)。
我想念 Seam 2,我们可以在 pages.xml 中执行此操作:
<exception class="dne.nmst.ond.exceptions.OfficeNotFoundException">
<redirect include-page-params="false" view-id="searchOffice.xhtml">
<message severity="warn"/>
</redirect>
和
<h:messages />
在视图中。