使用 FullAjaxExceptionHandler 时 h:body 不会重新渲染

2023-11-27

我正在使用 OmniFacesFullAjaxExceptionHandler显示错误页面。错误页面显示正确,但我在这些页面的样式方面遇到问题。

我的应用程序使用的模板在 body 元素上定义了 CSS 类。这些类对于正常页面和错误页面是不同的:

正常页面:

<h:body styleClass="main-body layout-compact">

错误页面:

<h:body styleClass="exception-body error-page">

当FullAjaxExceptionHandler处理异常时,会转发到错误页面(基于<error-page>机制在web.xml)。显然这不会重新渲染<h:body>标签,因为在检查 HTML 输出时,我可以看到<body>标签仍然包含正常页面的 CSS 类(而不是错误页面的类)。

貌似是原来的内容<h:body>替换为错误页面的内容<h:body>而不是仅仅替换完整的<h:body>。我不知道这是否是默认的 JSF / FullAjaxExceptionHandler 行为。

有什么办法可以拥有<h:body>使用正确的 CSS 类渲染?将 CSS 类移离<h:body>不是一个选择。


不幸的是,这是“设计使然”。 JSF 在执行 ajax 导航时不会替换整个文档,而只会替换单个文档的子级<head> and <body>元素,而父母却没有受到影响。这样做是出于历史原因;即旧版 Internet Explorer 不支持完全替换它们。

我自己所做的就是简单地将样式放入<main>元素代替。这<header> and <footer>在最终的 HTML 输出中通常是相同的。基本上:

<html>
    <head>
        <title>...</title>
    </head>
    <body>
        <header>...</header>
        <main class="#{page.type}">...</main>
        <footer>...</footer>
    </body>
</html>

如果您确实需要拥有<body class>修改后,那么最好的选择是通过错误页面模板中嵌入的 JavaScript 来完成此操作。

<h:outputScript rendered="#{faces.ajaxRequest}">
    document.body.className = "exception-body error-page";
</h:outputScript>

Note: #{faces}仅自 OmniFaces 2.5 起可用,如果您使用的是旧版本,请改用#{facesContext.partialViewContext.ajaxRequest}).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FullAjaxExceptionHandler 时 h:body 不会重新渲染 的相关文章

随机推荐

  • 如何通过 Objective-C 中的语音框架实现语音转文本?

    我想使用 iOS 语音框架在我的 Objective C 应用程序中进行语音识别 我找到了一些 Swift 示例 但在 Objective C 中找不到任何内容 是否可以从 Objective C 访问这个框架 如果是这样 怎么办 在花了足
  • 如果在“await”之后抛出,则任务抛出的异常将被吞掉

    我正在使用 NET 编写后台服务HostBuilder 我有一堂课叫MyService实现BackgroundService ExecuteAsync方法 我在那里遇到了一些奇怪的行为 在方法里面我await某个任务 以及之后抛出的任何异常
  • 使用 Json.NET 反序列化复杂对象

    我需要反序列化从 grogle 地图 api 返回的 json destination addresses Via Medaglie D Oro 10 47121 Forl FC Italia Via Torino 20123 Milano
  • 确定图像是否模糊

    我看到了很多关于这个的话题 我理解了这个理论 但我无法编写代码 我有一些照片 我想确定它们是否模糊 我找到了一个图书馆 aforge dll 我用它来对图像进行 FFT 举个例子 我正在处理两个图像 我的代码是 c public Bitma
  • 画布旋转文本工件

    I use Processing js在图像上显示一些 45 度旋转的文本 问题是 旋转后 文本变得难以阅读 因为伪影变得可见 字母间距不恒定或字母没有相同的底线 这里有一个demo 你可以看到第二个 Hello World 有 签名而不是
  • 使用 Nancy TinyIoC 配置 JsonNetSerializer 和 JsonNetBodyDeserializer

    我对南希来说是个菜鸟 我一直使用它作为生成 REST API 的框架 我熟悉 Json NET 所以我一直在玩Nancy Serialization JsonNet包裹 我的目标 自定义行为 即更改设置 JsonNetSerializer
  • NestedScrollView 中的 ViewPager

    我需要创建一个像 Google Newsstand 这样的界面 它是一种折叠标题 垂直滚动 上的 ViewPager 水平滚动 我的要求之一是使用 Google IO 2015 上提出的新设计支持库 http android develop
  • foo.bar() 和 bar(foo) 之间的区别?

    考虑 class Parent def init self last name eye color self last name last name self eye color eye color def show info self p
  • GWT:字符编码变音

    我想在标签中设置文本 labelDemnaechst setText Demn chst f llig 在应用程序的输出中 字符 显示错误 怎样才能很好地展示它们呢 GWT 假设所有源文件都以 UTF 8 编码 这就是为什么你会看到l sc
  • 在复制初始化中,对复制构造函数的调用是显式的还是隐式的?

    class AAA public explicit AAA const AAA AAA int int main AAA a 1 return 0 在上面的代码中 据我了解 尽管在大多数情况下被省略 但在语义上仍然需要调用复制构造函数 我的
  • 如何在不创建工作区的情况下从 tfs 获取特定版本的文件夹?

    我想在特定时间获取项目的源代码 变更集 所以我需要下载整个文件夹 我想在不同的时间执行此操作 并且处理不同的工作空间不是很方便 我知道关于TFS 将特定版本获取到单独的文件夹中 带工作区 和需要命令在没有工作区的情况下从 TFS 获取文件
  • 在 WPF 中绘制 3D 线条

    我正在开发 CAD 应用程序 并考虑使用 WPF 来渲染我的实体 但WPF似乎不支持绘制3D线条 有没有办法在WPF中绘制3D线条 我不喜欢为我需要绘制的每个线实体创建一个网格 因为我担心这会给我带来重大的性能问题 因为我必须在我的应用程序
  • 如何在Spring MVC中的@controllerAdvice或@RestControllerAdvice中查找控制器名称?

    ControllerAdvice public class GlobalExceptionHandler ExceptionHandler NoHandlerFoundException class public ResponseEntit
  • Bjarne Stroustrup 说我们必须避免链表

    我在 YouTube 上看到了这个视频 https www youtube com watch v YQs6IC vgmoBjarne 表示最好使用向量 而不是链表 我无法理解整个事情 所以有人可以用通俗的语言解释他在说什么吗 P S 我是
  • 如何使用 IBOutletCollection 将多个 UIImageView 连接到同一个插座?

    我有 10 个 UIImageViews 做同样的事情 它们有一些用计时器改变图像的 void 方法 我的 UIImageView 是一个插座 我想将所有 10 个 imageView 连接到同一个插座 但界面生成器不允许我这样做 我发现有
  • 如何修复 Plesk 中的 FastCGI 超时问题?

    PHP 支持当前设置为 作为 Fast CGI 运行 我的服务器日志中不断收到这些错误 mod fcgid 45秒内读取数据超时 脚本标头过早结束 index php 我认为应该快速修复 但我找不到要编辑的文件 这是我可以从 Plesk 更
  • firebase Analytics:Android 应用程序卸载统计信息

    我安装了 Firebase SDK 并将以下两行添加到 MainActivity java private FirebaseAnalytics mFirebaseAnalytics mFirebaseAnalytics FirebaseAn
  • html 正文小于其内容

    这是一个基本的插图问题的
  • 在 R 图中的 x 轴下方添加箭头

    我正在尝试在 R 图中的 x 轴下方添加标记特定 x 坐标的箭头 我的 x 轴位于 y 0 并且当我尝试在中使用负 y 坐标时arrows 因此箭头将垂直于 x 轴 我只绘制了箭头的边缘 尽管有一些空间 例如绘制 x 轴标签和刻度线的位置
  • 使用 FullAjaxExceptionHandler 时 h:body 不会重新渲染

    我正在使用 OmniFacesFullAjaxExceptionHandler显示错误页面 错误页面显示正确 但我在这些页面的样式方面遇到问题 我的应用程序使用的模板在 body 元素上定义了 CSS 类 这些类对于正常页面和错误页面是不同