gpt4 book ai didi

jsf - jsf 中的异常处理 - 在新页面中打印错误消息

转载 作者:行者123 更新时间:2023-12-04 17:55:13 26 4
gpt4 key购买 nike

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

我试过这个

    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>

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

最佳答案

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

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

  • 不要发送重定向。改为发送转发。您可以通过 ExternalContext#dispatch() 来做
    FacesContext.getCurrentInstance().getExternalContext().dispatch("error.xhtml");

    或者如果您已经在操作方法中,则只需按常规方式导航
    return "error";
  • 创建一个通用的错误页面主模板,并为每种类型的错误使用单独的模板客户端,并将消息放在 View 中。

    <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") .
  • 通过像这样的重定向 URL 传递一些错误标识符作为请求参数 redirect("error.xhtml?type=login")并让 View 处理它。

    <h:outputText value="You must login to continue." rendered="#{param.type == 'login'}" />
  • 将人脸消息保留在 flash 范围内。
    externalContext.getFlash().setKeepMessages(true);

    然而,Mojarra 有一个有点错误的闪存范围实现。对于当前版本,当您需要重定向到不同的文件夹时,这不起作用,但当目标页面位于同一文件夹中时,它会起作用。
  • 关于jsf - jsf 中的异常处理 - 在新页面中打印错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496430/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com