【问题标题】:exception handling in jsf - to print error message in the new pagejsf 中的异常处理 - 在新页面中打印错误消息
【发布时间】:2012-03-18 18:43:21
【问题描述】:

我只想在发生异常时在错误页面上打印自定义消息。

我试过了

    if(erroroccured){
        FacesMessage message=new FacesMessage("You must login to continue");
        context.addMessage(null, message);
        FacesContext.getCurrentInstance().getExternalContext().redirect("error.xhtml");

    }

在error.xhtml中我给了

    <h:messages></h:messages>

标签也是..每当发生异常时,我的页面都会被完美地重定向。但我会收到任何错误消息。

【问题讨论】:

  • 不,不是,这个问题是关于验证错误消息的,我在询问我需要重定向到另一个页面以打印我的自定义消息的异常处理。但是在那个问题中没有发生重定向......我在同一页面上打印验证消息没有问题..问题主要存在于重定向中..

标签: jsf jsf-2


【解决方案1】:

Faces 消息是请求范围的。重定向基本上指示网络浏览器发送一个全新的 HTTP 请求(这也是您在浏览器地址栏中看到 URL 被更改的原因)。之前请求中设置的面孔消息在新请求中当然不再可用。

有几种方法可以让它工作:

  1. 不要发送重定向。改为发送转发。您可以通过ExternalContext#dispatch() 进行操作

    FacesContext.getCurrentInstance().getExternalContext().dispatch("error.xhtml");
    

    如果您已经在操作方法中,则只需按常规方式导航

    return "error";
    
  2. 创建一个通用错误页面主模板,并为每种单独的错误类型使用单独的模板客户端,并将消息放在视图中。

    <ui:composition template="/WEB-INF/templates/error.xhtml"
        xmlns="http://www.w3.org/1999/xhtml"
        xmlns:ui="http://java.sun.com/jsf/facelets"
    >
        <ui:define name="message">
            You must login to continue.
        </ui:define>
    </ui:composition>
    

    然后你可以像redirect("error-login.xhtml")一样重定向到这个特定的错误页面。

  3. 通过像redirect("error.xhtml?type=login") 这样的重定向 URL 传递一些错误标识符作为请求参数,然后让视图处理它。

    <h:outputText value="You must login to continue." rendered="#{param.type == 'login'}" />
    
  4. 将面孔消息保留在 Flash 范围内。

    externalContext.getFlash().setKeepMessages(true);
    

    然而,Mojarra 的 Flash 示波器实现有些错误。在当前版本中,当您需要重定向到不同的文件夹时,这将不起作用,但当目标页面位于同一文件夹中时,它将起作用。

【讨论】:

  • 现在一切正常,但要处理这个异常.. Cannot call sendRedirect() after the response has been committed.
  • 显然,调用链中的一些其他代码也在调用sendRedirect()(或externalContext.redirect(),它在幕后委托给相同的方法)。你需要跳过那个电话。另请参阅此相关答案以获取一些提示:stackoverflow.com/questions/2123514/…
猜你喜欢
  • 2011-09-16
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-03
  • 2011-11-06
相关资源
最近更新 更多