【发布时间】:2017-04-05 07:29:15
【问题描述】:
我正在使用 OmniFaces FullAjaxExceptionHandler 来显示错误页面。错误页面显示正确,但这些页面的样式有问题。
我的应用程序使用的模板在 body 元素上定义了 CSS 类。这些类对于正常页面和错误页面是不同的:
普通页面:
<h:body styleClass="main-body layout-compact">
错误页面:
<h:body styleClass="exception-body error-page">
当 FullAjaxExceptionHandler 处理异常时,会执行到错误页面的转发(基于web.xml 中的<error-page> 机制)。显然这不会重新渲染 <h:body> 标签,因为在检查 HTML 输出时,我可以看到 <body> 标签仍然包含来自正常页面的 CSS 类(而不是错误页面的类)。
看来原来<h:body>的内容被替换为错误页面<h:body>的内容,而不是仅仅替换完整的<h:body>。我不知道这是否是默认的 JSF / FullAjaxExceptionHandler 行为。
有没有办法让<h:body> 使用正确的 CSS 类呈现?将 CSS 类从 <h:body> 移走不是一种选择。
【问题讨论】:
-
当你转发到错误页面时,它不是一个ajax调用,所以你不能重新渲染。相反,您正在加载一个全新的全新错误页面。请检查转发是否正确。如果是这样,您将在 body 标记上应用正确的 CSS。
-
转发是由FullAjaxExceptionHandler正确完成的,我不是自己做转发的。显示错误页面(在相同的 url 下)并且整个 内容被更改。然而, 标签仍然具有上一页中的 CSS 类。所以似乎body标签没有被重新渲染,而只是它的内容。我不知道这是否是标准的 JSF 行为。