如何通过ExceptionHandler将错误消息传递给错误页面?

时间:2013-10-24 19:12:16

标签: jsf-2 exception-handling seam-solder

我的首次使用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的错误消息。我如何从这里到达那里?

我考虑过的一件事是将错误放入flash上​​下文中,但在尝试从此异常处理类引用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 />
在视图中

1 个答案:

答案 0 :(得分:0)

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

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