0

我的首个 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 />

在视图中。

4

1 回答 1

0

您可以在代码中设置错误消息并指定消息应出现在哪个 h:messages 标记中。请参阅下面的答案。

https://stackoverflow.com/a/4194098/2450373

于 2013-10-29T09:00:42.897 回答