2013-04-04 8 views
5

Ich verwende für einige meiner Seiten in meiner JSF2-App Oberflächen. Ich möchte kontrollieren, woher die Seite die jquery.js bekommt. Gibt es eine Möglichkeit, in faces-config oder web.xml anzugeben, dass die JavaScript-Bibliotheken von JQuery nicht hinzugefügt werden sollen?Kann Primefaces jquery von einer anderen Domain bekommen?

Zum Beispiel nicht hinzufügen:

<script type="text/javascript" src="/myappcontextroot/javax.faces.resource/jquery/jquery.js.jsf?ln=primefaces"></script> 

Ich würde die Seite Ausgabe etwas wie lieber:

<script type="text/javascript" src="http://mydomain.com/jquery/jquery.js"></script> 

Oder nicht ausgegeben etwas tun, wenn die jQuery-Bibliothek benötigt. (Ich werde das Obige manuell zur Seite hinzufügen.)

Ist das überhaupt möglich? Wenn das so ist, wie?

Antwort

8

Sie benötigen grundsätzlich eine benutzerdefinierte resource handler, die die gewünschte externe URL auf Resource#getRequestPath() immer dann zurückgibt, wenn die Ressource primefaces:jquery/jquery.js angefordert wurde.

z.

public class CDNResourceHandler extends ResourceHandlerWrapper { 

    private ResourceHandler wrapped; 

    public CDNResourceHandler(ResourceHandler wrapped) { 
     this.wrapped = wrapped; 
    } 

    @Override 
    public Resource createResource(final String resourceName, final String libraryName) { 
     final Resource resource = super.createResource(resourceName, libraryName); 

     if (resource == null || !"primefaces".equals(libraryName) || !"jquery/jquery.js".equals(resourceName)) { 
      return resource; 
     } 

     return new ResourceWrapper() { 

      @Override 
      public String getRequestPath() { 
       return "http://mydomain.com/jquery/jquery.js"; 
      } 

      @Override 
      public Resource getWrapped() { 
       return resource; 
      } 
     }; 
    } 

    @Override 
    public ResourceHandler getWrapped() { 
     return wrapped; 
    } 

} 

Um es zu bekommen es in faces-config.xml zu laufen, Karte wie folgt:

<application> 
    <resource-handler>com.example.CDNResourceHandler</resource-handler> 
</application> 

Die JSF-Utility-Bibliothek OmniFaces bietet eine wiederverwendbare Lösung in Geschmack von CDNResourceHandler, die in Ihrem Fall ist als

zu konfigurierenden
<context-param> 
    <param-name>org.omnifaces.CDN_RESOURCE_HANDLER_URLS</param-name> 
    <param-value>primefaces:jquery/jquery.js=http://mydomain.com/jquery/jquery.js</param-value> 
</context-param> 
Verwandte Themen