2013-04-04 4 views
5

मैं अपने जेएसएफ 2 ऐप में अपने कुछ पृष्ठों के लिए प्राइमफेस का उपयोग कर रहा हूं। मैं यह नियंत्रित करना चाहता हूं कि पेज jquery.js कहां से मिलता है। JQuery जावास्क्रिप्ट पुस्तकालयों को जोड़ने के लिए चेहरे-कॉन्फ़िगर या web.xml में निर्दिष्ट करने का कोई तरीका है।क्या प्राइमफेस किसी अन्य डोमेन से jquery प्राप्त करने में सक्षम है?

उदाहरण के लिए उपयोगी नहीं होते:

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

मैं की तरह पेज उत्पादन कुछ पसंद करेंगे:

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

या जब jQuery पुस्तकालय की जरूरत उत्पादन कुछ भी नहीं। (मैं मैन्युअल रूप से पृष्ठ पर उपरोक्त जोड़ दूंगा।)

क्या यह भी संभव है? यदि हां, तो कैसे?

उत्तर

8

आपको मूल रूप से एक कस्टम resource handler की आवश्यकता होती है जो Resource#getRequestPath() पर वांछित बाहरी यूआरएल देता है जब भी संसाधन primefaces:jquery/jquery.js अनुरोध किया जाता है।

उदा।

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 में यह नक्शा इस प्रकार है:

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

JSF उपयोगिता पुस्तकालय OmniFacesCDNResourceHandler के स्वाद में एक पुन: प्रयोज्य समाधान जो आपके मामले में है

के रूप में विन्यस्त किया जा करने के लिए प्रदान करता है
<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> 
संबंधित मुद्दे