2013-04-04 28 views
5

我在我的JSF2應用程序中爲我的一些頁面使用了primefaces。我想控制頁面從哪裏獲取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

您基本上需要一個自定義resource handler,每當請求資源primefaces:jquery/jquery.js時,它將返回所需的外部URL Resource#getRequestPath()

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

} 

讓它運行,在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> 
相關問題