2013-04-04 4 views
5

Sto usando le primefaces per alcune delle mie pagine nella mia app JSF2. Vorrei controllare da dove la pagina ottiene il jquery.js. C'è un modo per specificare in faces-config o web.xml di non aggiungere le librerie javascript di JQuery.Primefaces è in grado di ottenere jquery da un altro dominio?

Per esempio non aggiungo:

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

io preferirei l'output della pagina qualcosa di simile:

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

o non fare nulla di uscita in caso di necessità la libreria jQuery. (Aggiungerò manualmente quanto sopra alla pagina.)

È possibile? Se é cosi, come?

risposta

8

Fondamentalmente è necessario un resource handler personalizzato che restituisce l'URL esterno desiderato su Resource#getRequestPath() ogni volta che è stata richiesta la risorsa primefaces:jquery/jquery.js.

E.g.

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

} 

Per farlo funzionare, la mappa in faces-config.xml come segue:

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

La libreria di utilità JSF OmniFaces offre una soluzione riutilizzabile nel sapore di CDNResourceHandler che è nel tuo caso per essere configurato come

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