IllegalArgumentException:Path resources / primefaces-mytheme不以'/'开头

时间:2014-11-25 15:56:25

标签: java jsf primefaces

我有一个部署在GlassFish 3.1.2.2服务器上的JSF / PrimeFaces项目。它使用我自己的主题,直到现在没有问题。但是今天我想将它部署在GlassFish 4.1服务器上,现在我收到了这个错误:

java.lang.IllegalArgumentException: Path resources/primefaces-mytheme does not start with '/'

还有更多:

at org.apache.catalina.core.StandardContext.getResourcePaths(StandardContext.java:7577)
at org.apache.catalina.core.ApplicationContext.getResourcePaths(ApplicationContext.java:443)
at org.apache.catalina.core.ApplicationContextFacade.getResourcePaths(ApplicationContextFacade.java:239)
at com.sun.faces.context.ExternalContextImpl.getResourcePaths(ExternalContextImpl.java:532)
at com.sun.faces.application.resource.WebappResourceHelper.findLibrary(WebappResourceHelper.java:189)
at com.sun.faces.application.resource.ResourceManager.findLibrary(ResourceManager.java:465)
at com.sun.faces.application.resource.ResourceManager.getResourceInfo(ResourceManager.java:292)
at com.sun.faces.application.resource.ResourceManager.doLookup(ResourceManager.java:286)
(...)

但这对我来说只是胡言乱语,我无处可见任何我创建的课程或文件,所以我无法将其放在错误来源的地方。我所知道的是,它必须与我的主题相关,即{解压 - >我不会使用jar )在/resources/primefaces-mytheme文件夹下:

webapp
  +-WEB-INF
  +-resources
       +-default
       +-images
       +-primefaces-mytheme
               +-images
               +-theme.css

theme.css内,资源文件夹中对图像的引用如下:

url("#{resource['primefaces-mytheme:images/ui-bg_flat_0_ffffff_40x100.png']}")

css文件实际上是我写出主题primefaces-mytheme名称的唯一地方。我在哪里必须查找错误的原因?

1 个答案:

答案 0 :(得分:1)

找到它。我认为它有关于如何使用资源文件夹以及我如何引用它的一些事情,但它实际上就在我眼前:在部署描述符web.xml中声明资源目录:

GlassFish 3.1.2.2 接受了这个:

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>resources</param-value>
</context-param>

GlassFish 4 需要这样:{{em> / resources之前)

<context-param>
    <param-name>javax.faces.WEBAPP_RESOURCES_DIRECTORY</param-name>
    <param-value>/resources</param-value>
</context-param>

我不知道为什么之前的GlassFish版本在没有前导param-value的情况下接受了/。也许我从一开始就把它弄错了,而且GlassFish 3也不理会我的错字或者他们只是改变了目录需要声明的方式。