Ho un server dedicato per i contenuti statici quindi non voglio usare la directory delle risorse per memorizzare i file javascript ma non voglio smettere di usare il tag <h:outputScript />
.Come posso usare <h: outputScript /> con un file remoto?
Come posso fare in modo che quel tag generi un collegamento al mio server statico in cui si trovano i file invece di RES_NOT_FOUND. Non ho nemmeno bisogno JSF per verificare se i file sono lì ...
ho provato: <h:outputScript name="#{requestBean.staticURL}/javascript.js"/>
generare: <script type="text/javascript" src="http://static.server.com/javascript.js"></script>
ma genera: <script type="text/javascript" src="RES_NOT_FOUND"></script>
Cosa posso fare ?
SOLUZIONE: Daniel mi ha indicato una soluzione piacevole!
Ho scaricato il codice sorgente del Omnifaces e modificato il metodo org.omnifaces.resourcehandler.CDNResourceHandle.createResource(String resourceName, String libraryName)
a:
public Resource createResource(String resourceName, String libraryName) {
final Resource resource = wrapped.createResource(resourceName, libraryName);
if (cdnResources == null) {
return resource;
}
String resourceId = ((libraryName != null) ? libraryName + ":" : "") + resourceName;
String path = cdnResources.get(resourceId);
if(path == null){
if(libraryName != null){
resourceId = libraryName + ":%";
path = cdnResources.get(resourceId);
if(path == null){
return resource;
}
path += "/"+resourceName;
}
else return resource;
}
final String requestPath = path;
return new ResourceWrapper() {
@Override
public String getRequestPath() {
return requestPath;
}
@Override
public Resource getWrapped() {
return resource;
}
};
}
Con questa modifica posso aggiungere questo al mio web.xml file di
<context-param>
<param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name>
<param-value>
somelib2:%=http://cdn.example.com/somelib2,
js/script1.js=http://cdn.example.com/js/script1.js,
somelib:js/script2.js=http://cdn.example.com/somelib/js/script2.js,
otherlib:style.css=http://cdn.example.com/otherlib/style.css,
images/logo.png=http://cdn.example.com/logo.png
</param-value>
</context-param>
Avviso del somelib2:%=http://cdn.example.com/somelib2
, questo punterà qualsiasi risorsa nella libreria somelib2 al relativo percorso in http://cdn.example.com/somelib2, per esempio:
<h:outputScript name="js/myjs.js" library="somelib2" />
uscita volontà:
<script type="text/javascript" src="http://cdn.example.com/somelib2/js/myjs.js"></script>
Questo funziona con <h:outputScript /><h:outputStylesheet /><h:graphicImage />
, tutto ciò che utilizzano risorse;
Grazie, il vostro suggerimento mi ha aiutato molto e risolto il mio problema :) ho cambiato il CDNResourceHandle.createResource (String resourceName, String libraryName) metodo per consentire l'utilizzo della libreria per collegarsi al mio server invece di elencare ogni singolo file e ora funziona perfettamente :) –
Se sei interessato alla modifica, ho cambiato questa parte: 'String resourceId = ((libraryName! = null)? libraryName + ":": "") + resourceName; String path = cdnResources.get (resourceId); se (percorso == null) { \t se (LibraryName! = Null) { \t \t ResourceId = LibraryName + ":%"; \t \t path = cdnResources.get (resourceId); \t \t if (percorso == null) { \t \t \t risorsa di ritorno; \t \t} \t \t path + = "/" + resourceName; \t} \t altra risorsa di restituzione; } finale String requestPath = percorso; ' –
Questo farà il lavoro:' org.omnifaces.CDN_RESOURCE_HANDLER_URLS alibraryname:% = http: //cdn.example.com context-param> ', ora puoi fare ciò:' ' –