2013-04-04 26 views
5

JSF2 uygulamamdaki bazı sayfalarım için primefaces kullanıyorum. Sayfanın jquery.js'yi nereden aldığını kontrol etmek istiyorum. JQuery javascript kütüphaneleri eklememek için faces-config veya web.xml belirtmek için bir yolu var mı.Primefaces başka bir alandan jquery alabilir mi?

Örneğin katmayan:

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

ben gibi sayfa çıkışı şey tercih ediyorum:

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

Ya jquery kütüphanesini gerektiğinde çıkış şey yapamaz. (Yukarıdaki sayfayı elle ekleyeceğim.)

Bu mümkün mü? Öyleyse nasıl?

cevap

8

primefaces:jquery/jquery.js kaynağı istendiğinde, Resource#getRequestPath() numaralı telefondan istenen dış URL'yi döndüren özel bir resource handler gereksinimine ihtiyacınız vardır.

E.g. aşağıdaki gibi

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

} 

faces-config.xml bunu map, yayınlanmaya almak için:

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

MTU araç kütüphanesi OmniFaces

olarak yapılandırılacak sizin durumunuzda olan CDNResourceHandler lezzetinde bir yeniden kullanılabilir bir çözüm sunar
<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>