2013-04-04 72 views
5

JSF2アプリで私のページのいくつかにprimefaceを使用しています。ページからjquery.jsを取得する場所を制御したいと思います。 faces-configまたはweb.xmlでJQuery JavaScriptライブラリを追加しないように指定する方法はありますか?Primefacesは別のドメインから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

基本的にはprimefaces:jquery/jquery.jsというリソースが要求されるたびに、Resource#getRequestPath()に必要な外部URLを返すカスタムresource handlerが必要です。

など。次のように

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ユーティリティライブラリOmniFaces

として設定するために、あなたのケースである CDNResourceHandlerの風味で再利用可能なソリューションを提供しています
<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> 
関連する問題