Primefaces 是不是能够从另一个域获取 jquery?

Posted

技术标签:

【中文标题】Primefaces 是不是能够从另一个域获取 jquery?【英文标题】:Is Primefaces able to get jquery from another domain?Primefaces 是否能够从另一个域获取 jquery? 【发布时间】:2013-03-26 21:40:56 【问题描述】:

我在我的 JSF2 应用程序中的一些页面上使用 primefaces。我想控制页面从哪里获取 jquery.js。有没有办法在 faces-config 或 web.xml 中指定不添加 JQuery javascript 库。

例如不加:

<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 库时不做任何输出。 (我会手动将以上内容添加到页面中。)

这甚至可能吗?如果有,怎么做?

【问题讨论】:

【参考方案1】:

您基本上需要一个自定义的resource handler,只要请求资源primefaces:jquery/jquery.js,它就会在Resource#getRequestPath() 上返回所需的外部URL。

例如

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>

【讨论】:

以上是关于Primefaces 是不是能够从另一个域获取 jquery?的主要内容,如果未能解决你的问题,请参考以下文章

我可以从另一个域的 iframe 父级访问 javascript

JSF/Primefaces 如何将另一个域中的 .xhtml 包含到您的 .xhtml 中

如何配置 Angular $resource (ngResource) 以使用 CORS 从另一个域中提取数据

org.primefaces.context.PrimeFacesContext.release中的java.lang.NullPointerException(PrimeFacesContext.j

从另一个 terraform 项目获取 VPC id

如何从另一个模式中获取特定的键值,通过比较它们是不是具有相同的键值?