CSS样式有时仅在jsf页面上的页面刷新后应用?

Posted

技术标签:

【中文标题】CSS样式有时仅在jsf页面上的页面刷新后应用?【英文标题】:CSS style sometimes only applied after a page refresh on a jsf page? 【发布时间】:2011-11-20 03:44:54 【问题描述】:

我一直在为我们的应用程序中的一个奇怪错误而苦苦挣扎,即使在谷歌和 *** 上也找不到解决方案 我没有发现任何符合我的问题。

首先,应用程序设置的简短摘要:

ICEfaces 1.8.1 和 JSF 1.2 接缝 2.1.1 Java 1.6,更新 20 在 JBoss 4.2.2.GA 上运行 应用程序部署为 EAR 文件

如果您需要任何其他信息,请告诉我,我会尽力弄清楚并提供给您。

现在问题来了:

有时(在应用程序中的随机页面),JSF 生成的 html 代码被创建并发送到浏览器, 但不包括样式表。页面刷新(按 F5)后,页面将按原样显示并应用所有样式。 在某些页面上,错误似乎是可重现的,而在其他页面上,它只是随机发生。 该错误 (?) 出现在 Opera(11.51,未测试早期版本)和 Firefox(应用程序在 3.6 中正常工作,但在 Firefox 6 中不正常)。 IE9 运行正常。

该站点由一个构成应用程序布局的***页面 (template.xhtml) 组成,所有其他站点都是 通过 ui:include-Tags 包含。

进入head-Tag,样式通过

<link href="#request.contextPath/stylesheet/icefaces_style.css" rel="stylesheet" type="text/css" />
<link href="#request.contextPath/stylesheet/screen.css"
rel="stylesheet" type="text/css" />

这呈现为:

即使页面呈现正确,样式表也不包含在 head 中,它们被放入 body-tag 中,呈现为:

<body>
<link type="text/css" rel="stylesheet" href="/myApp/stylesheet/icefaces_style.css">
<link type="text/css" rel="stylesheet" href="/myApp/stylesheet/screen.css">
</body>

如果渲染不正确,则根本不包含任何样式。实际上,没有包含 template.xhtml 页面的 head-tag 中的任何内容 到呈现的响应中。

您有什么建议可以进一步寻找或可能的解决方案吗?提前致谢!

【问题讨论】:

Icefaces 将呈现的页面与其之前的版本进行比较,然后将增量作为部分更新发送到 xml。您分析过这些 xml 响应吗?将它们包括在这里 - 您可以使用 firebug 来访问它。还要确保您不依赖“查看页面源代码”——它在大多数浏览器中无法与 ajax 一起正常工作。 我找不到任何 JSF 或表达式语言文档来说明是否允许在标题中使用表达式。但是我之前没有在 header 中看到过表达式,对于 ICEfaces 在处理页面时会被它混淆并不感到惊讶。 @SimonC 哇——只需将样式标签移动到正文中就可以了,至少,我无法重现它。 Icefaces 似乎可以理解标题中的表达式,但只有在整页刷新时 - 在部分更新中,它们似乎会丢失...发布您的建议作为答案,我会接受。 【参考方案1】:

我找不到任何说明是否允许在标题中使用表达式的 JSF 或表达式语言文档。但是我之前没有在标题中看到过表达式,对于 ICEfaces 在处理页面时会被它混淆并不感到惊讶。将 CSS 样式移动到正文中,然后从 ICEfaces 到 Web 浏览器的部分更新将起作用。

【讨论】:

以上是关于CSS样式有时仅在jsf页面上的页面刷新后应用?的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 插件 (DataTables) 仅在页面刷新时正确加载

在 React 应用程序中刷新后 CSS 样式消失

Chrome 和 IE8 上的 Jcrop 问题 - 仅在页面刷新时才显示裁剪

首次登录/导航后,Angular 6 样式无法正确加载

Nextjs 生产应用程序上的页面刷新中断样式

Vue:在路线更改时,仅在完成加载后才呈现页面