CSS style sometimes only applied after a page refresh on a jsf page?
Asked Answered
S

1

6

I've been struggeling a while with a strange bug in our application and wasn't able to find solution, even on google and stackoverflow i found nothing matching my problem.

First, a short summary of the application setup:

  • ICEfaces 1.8.1 & JSF 1.2
  • Seam 2.1.1
  • Java 1.6, Update 20
  • running on JBoss 4.2.2.GA
  • application is deployed as EAR-File

If you need any additional information, please tell me, i will try to figure it out and provide it to you.

Now, here comes the problem:

Sometimes (at random pages in the application), the JSF-generated HTML-Code is created and send to the browser, but no stylesheets are included. After a page refresh (hitting F5) the page is displayed as it should and all styles are applied. On some pages, the error seems to be reproducable, on others it just occurs randomly. The bug (?) occurs in Opera (11.51, no earlier versions tested) and Firefox (App works normally in 3.6, but not in Firefox 6). IE9 is working normally.

The site consists of a top level page (template.xhtml) forming the application layout, all other sites are included via ui:include-Tags.

Into the head-Tag, styles are included via

<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" />

This renders to:

Even if the page renders correct, stylesheets are not included into head, they are put into the body-tag, rendered as:

<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>

If it doesn't render correct, simply no styles are included. Actually, nothing from the head-tag of template.xhtml page is included into the rendered response.

Do you have any suggestions where to look further or possible solutions? Thanks in advance!

Sexlimited answered 19/9, 2011 at 10:58 Comment(3)
Icefaces is comparing the rendered page with its previous version, then it sends deltas as partial updates in xml. Have you analyzed these xml responses? Include them here - you can use firebug to access it. Also make sure you don't rely on "view page source" - it won't work properly with ajax in most browsers.Harville
I cannot find any JSF or expression language documentation that states whether expressions are allowed in the header or not. But I have not seen expressions in the header before and am not surprised that ICEfaces is confused by it when processing the page.Gouty
@SimonC Wow - simply moving the style tags into the body did the trick, at least, i wasn't able to reproduce it. It seems that Icefaces understands expressions in headers, but only when there is a full page refresh - in partial updates, they seem to get lost... Post your suggestion as an answer and i'll accept it.Sexlimited
G
2

I cannot find any JSF or expression language documentation that states whether expressions are allowed in the header or not. But I have not seen expressions in the header before and am not surprised that ICEfaces is confused by it when processing the page. Move the CSS styles into the body and then the partial updates from ICEfaces to the web browser will work.

Gouty answered 25/9, 2011 at 7:9 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.