2011-08-28 29 views
7

Estoy usando la anotación @ResourceDependency en un componente JSF para agregar archivos Javascript y CSS a mi página JSF.Obtener un EL en un archivo Javascript, cargado por @ResourceDependency

En mi archivo Javascript, necesito hacer referencia a otro archivo de recursos (un archivo .swf, que se encuentra en META-INF/resources, como requiere JSF). Traté de poner una expresión EL #{resource['swf:file.swf']} en mi código javascript, pero no se resolverá.

Para exapmle, por el siguiente archivo JS en el servidor:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

El navegador obtiene:

var instance = new JSClass(); 
instance.setResourceUrl("#{resource['swf:file.swf']}"); 

que está mal.

Mientras que cuando coloco el mismo EL en el archivo CSS, se resuelve correctamente. Para el siguiente archivo CSS en el servidor:

.instance-css-class { 
    background: url("#{resource['swf:file.swf']}") 
} 

El navegador obtiene:

.instance-css-class { 
    background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf") 
} 

¿Qué es exactamente lo que necesito, pero en el archivo JS.

Obviamente, puedo usar el CSS como una solución para el problema (crear un elemento DOM, adjuntar la clase CSS, y luego leer y analizar la propiedad de estilo requerida). Pero, ¿hay una forma más elegante de lograrlo? ¿Es un error en la biblioteca JSF (estoy usando Mojarra 2.0.3, con Jboss 6.1), o hay una razón para ese comportamiento?

Tenga en cuenta que el código anterior es parte de una biblioteca de etiquetas, por lo que las soluciones alternativas como those no se pueden utilizar.


Editar - Parece que la solución CSS no es factible, ya que no puedo ver una manera de conseguir atributo CSS de un archivo CSS. Entonces cualquier solución (de trabajo) sería aceptada con gusto también.

+0

Recientemente descubrí, para mi sorpresa, que EL se evalúa en CSS. La implementación de Mojarra usa un ResourceHelper que es capaz de resolver expresiones EL dentro de los recursos solicitados por una solicitud de recursos Faces. Es por eso que me pregunto que EL no se evalúa en archivos JS ya que es el mismo tipo de solicitud. Sería genial si alguien puede arrojar algo de luz sobre esto. – tasel

Respuesta

0

BalusC ha respondido una pregunta similar en detalle here. Aunque la primera solución es la más fácil de implementar, le recomendaría ir con la tercera, que en mi opinión es la correcta.

Cuestiones relacionadas