Sto usando l'annotazione @ResourceDependency
in un componente JSF per aggiungere file JavaScript e CSS nella mia pagina JSF.Ottenere un EL in un file Javascript, caricato da @ResourceDependency
Nel mio file Javascript, ho bisogno di fare riferimento a un altro file di risorse (un file .swf, che si trova in META-INF/resources, come richiesto da JSF). Ho provato a inserire un'espressione EL #{resource['swf:file.swf']}
nel mio codice javascript, ma non verrà risolto.
Per exapmle, per il seguente file JS nel server:
var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");
Il browser ottiene:
var instance = new JSClass();
instance.setResourceUrl("#{resource['swf:file.swf']}");
che è sbagliato.
Mentre quando inserisco lo stesso EL nel file CSS, viene risolto correttamente. Per il seguente file CSS nel server:
.instance-css-class {
background: url("#{resource['swf:file.swf']}")
}
Il browser ottiene:
.instance-css-class {
background: url("/webapp/javax.faces.resource/file.swf.jsf?ln=swf")
}
Che è esattamente quello che mi serve, ma nel file JS.
Ovviamente, posso usare il CSS come soluzione alternativa al problema (Creare un elemento DOM, collegare la classe CSS ad esso, quindi leggere e analizzare la proprietà di stile richiesta). Ma c'è un modo più elegante per raggiungerlo? È un bug nella libreria JSF (sto usando Mojarra 2.0.3, con Jboss 6.1), o c'è un motivo per questo comportamento?
Ricorda che il codice sopra fa parte di una libreria di tag, pertanto non è possibile utilizzare soluzioni alternative come those.
Modifica - Sembra che la soluzione CSS non è fattibile, dal momento che non riesco a vedere un modo per ottenere l'attributo CSS da un file CSS. Quindi qualsiasi soluzione (di lavoro) sarebbe accettata volentieri.
Ho appena scoperto, con mia sorpresa, che EL viene valutato in CSS. L'implementazione di Mojarra utilizza un ResourceHelper che è in grado di risolvere le espressioni EL all'interno delle risorse richieste da una richiesta di risorse di facce. Ecco perché mi chiedo che EL non venga valutato nei file JS poiché è lo stesso tipo di richiesta. Sarebbe bello se qualcuno potesse far luce su questo. – tasel