2011-09-19 10 views
5

He estado luchando un tiempo con un error extraño en nuestra aplicación y no fue capaz de encontrar una solución, incluso en google y stackoverflow no encontré nada que coincida con mi problema.El estilo CSS a veces solo se aplica después de una actualización de página en una página jsf?

En primer lugar, un breve resumen de la instalación de la aplicación:

  • ICEfaces 1.8.1 & JSF 1.2
  • costura 2.1.1
  • Java 1.6, Actualización 20
  • se ejecuta en JBoss 4.2. 2.GA
  • aplicación se implementa como EAR-File

Si necesita información adicional, dígame, intentaré resolverlo y proporcionárselo.

Ahora, aquí viene el problema:

veces (en las páginas al azar de la aplicación), la generada por JSF código HTML se crea y envía al navegador, pero no hay hojas de estilo están incluidos. Después de actualizar una página (presionando F5), la página se muestra como debería y se aplican todos los estilos. En algunas páginas, el error parece ser reproducible, en otras simplemente ocurre al azar. El error (?) Ocurre en Opera (11.51, no se probaron versiones anteriores) y Firefox (la aplicación funciona normalmente en 3.6, pero no en Firefox 6). IE9 funciona normalmente.

El sitio consiste en una página de nivel superior (template.xhtml) que forma el diseño de la aplicación, todos los demás sitios son incluidos a través de ui: include-Tags.

en la cabeza-Tag, estilos están incluidos a través de

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

Esto hace a:

Incluso si la página se representa correcta, hojas de estilo no están incluidos en la cabeza, que son poner en la etiqueta de cuerpo, representa como:

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

Si no se muestra correctamente, simplemente no se incluyen los estilos. En realidad, nada de la etiqueta principal de la página template.xhtml se incluye en en la respuesta procesada.

¿Tiene alguna sugerencia sobre dónde buscar más o posibles soluciones? ¡Gracias por adelantado!

+1

Icefaces está comparando la página representada con su versión anterior, luego envía deltas como actualizaciones parciales en xml. ¿Has analizado estas respuestas xml? Inclúyalos aquí: puede usar Firebug para acceder a él. También asegúrese de no confiar en "ver el origen de la página": no funcionará correctamente con ajax en la mayoría de los navegadores. – mrembisz

+1

No encuentro ninguna documentación JSF o de lenguaje de expresión que indique si las expresiones están permitidas en el encabezado o no. Pero no he visto expresiones en el encabezado anterior y soy no me sorprende que ICEfaces se confunda al procesar la página. –

+0

@SimonC Wow - simplemente moviendo las etiquetas de estilo en el cuerpo hizo el truco, al menos, no pude reproducirlo. Parece que Icefaces entiende las expresiones en los encabezados, pero solo cuando hay una actualización de página completa, en las actualizaciones parciales, parece que se pierden ... Publique su sugerencia como una respuesta y la aceptaré. – Volker

Respuesta

2

No encuentro ninguna documentación JSF o de lenguaje de expresiones que indique si las expresiones están permitidas en el encabezado o no. Pero no he visto expresiones en el encabezado antes y no me sorprende que ICEfaces se confunda al procesar la página. Mueva los estilos CSS al cuerpo y luego las actualizaciones parciales de ICEfaces al navegador web funcionarán.

Cuestiones relacionadas