我正在使用OmniFaces FullAjaxExceptionHandler来显示错误页面。错误页面可以正确显示,但是这些页面的样式存在问题。
我的应用程序使用的模板在<h:body>
部分中加载了CSS类,如下所示。 <h:outputStylesheet name="css/theme.css" library="theme" />
我发现h:body not rerendered when using FullAjaxExceptionHandler上的BalusC答案对于更改正文标签很有帮助。但是我很困惑为什么FullAjaxExceptionHandler不能代替单个<head>
元素的孩子。似乎所有<h:outputStylesheet>
元素都被忽略,无论它们位于何处。
答案 0 :(得分:1)
我知道这是一个很老的问题,但我最近才遇到它,直到 2021 年 5 月 15 日才刚刚解决。
标题是这个问题在 OmniFaces >= 3.11.1 的版本中得到解决。在撰写本文时,OmniFaces 3.11.1 是一个 Maven 快照构建。
该问题是由于 JSF 2.3 的 Mojarra 实现试图避免将 HTML 链接输出到 CSS 资源两次造成的。它通过记录它认为已输出的所有资源的列表来做到这一点。然后,如果进一步尝试输出相同的资源,则第二次和进一步的尝试将被忽略。该列表存储在名为“/javax.faces.resource”的 JSF 属性中,该属性是 ResourceHandler.RESOURCE_IDENTIFIER 的值。
在 Primefaces/JSF 呈现对由 Primefaces 组件生成的 Ajax 请求的响应的情况下,呈现会替换整个页面,包括已经呈现的资源。在这种情况下,OmniFaces 的 FullAjaxExceptionHandler 应该清除“/javax.faces.resource”属性,以允许重新渲染资源。
中跟踪并解决了问题