相关疑难解决方法(0)

什么是JSF资源库以及如何使用它?

在JSF <h:outputStylesheet>,<h:outputScript><h:graphicImage>组件具有library属性.这是什么以及如何使用它?Web上有很多示例,它们使用如下公共内容/文件类型css,js以及img(或image)作为库名称,具体取决于所使用的标记:

<h:outputStylesheet library="css" name="style.css" />
<h:outputScript library="js" name="script.js" />
<h:graphicImage library="img" name="logo.png" />
Run Code Online (Sandbox Code Playgroud)

它有用吗?library这些示例中的值似乎只是重复标记名称已经表示的内容.对于<h:outputStylesheet>它来说,基于标签名称已经很明显它代表了一个"CSS库".与以下内容有什么不同,它们的工作方式相同?

<h:outputStylesheet name="css/style.css" />
<h:outputScript name="js/script.js" />
<h:graphicImage name="img/logo.png" />
Run Code Online (Sandbox Code Playgroud)

此外,生成的HTML输出有点不同.给定URL模式的上下文路径/contextnameFacesServlet映射*.xhtml,前者生成以下HTML,其库名称为请求参数:

<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/style.css.xhtml?ln=css" />
<script type="text/javascript" src="/contextname/javax.faces.resource/script.js.xhtml?ln=js"></script>
<img src="/contextname/javax.faces.resource/logo.png.xhtml?ln=img" alt="" />
Run Code Online (Sandbox Code Playgroud)

而后者在URI的路径中生成以下带有库名的HTML:

<link rel="stylesheet" type="text/css" href="/contextname/javax.faces.resource/css/style.css.xhtml" />
<script type="text/javascript" src="/contextname/javax.faces.resource/js/script.js.xhtml"></script>
<img src="/contextname/javax.faces.resource/img/logo.png.xhtml" alt="" />
Run Code Online (Sandbox Code Playgroud)

后一种方法在事后看来也比前一种方法更有意义.该library属性究竟有用吗?

resources jsf jsf-2

224
推荐指数
1
解决办法
12万
查看次数

阻止在页面加载时将后缀添加到资源

我有一个JSF2应用程序运行和工作没有问题.我与JSF的问题在于资源包.所有资源都.xhtml附加了后缀.因此main.css成为main.css.xhtml在浏览器中加载时.我想拥有它所以.xhtml不会依赖资源(不要介意页面本身).

是否有一个地方,我们可以一个方式具有.xhtml附加的资源呢?

理想情况下,我不必改变网站的内部运作.我在下面列出了一些想法,但我不得不说我不喜欢这些.希望在某个地方找到解决方案?

我在Glassfish 3.1.2.2上使用Majorra v.2.1.17.

当前Faces Servlet加载为web.xml(已更新)

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/javax.faces.resource/*</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

为什么这个问题与其他问题不同

推理

当然你可能会问我为什么需要这个.好吧,我们正在推动我们的应用程序由Akamai CDN提供服务.

我们对网站集成的问题是我们正在尝试在边缘服务器上缓存静态内容.这是通过匹配文件扩展名(即:.js,.doc,.png,css等)来完成的.我们无法匹配,xhtml因为这将缓存所有页面以及静态内容.这会导致会话等问题.

试图解决方案

根据BalusC的回答,我按照建议实现了资源处理程序.我不会在这里重写代码,因为它在下面回答.

但是,我在加载复合组件时遇到错误.我这样得到一个错误:

WARNING: StandardWrapperValve[Faces Servlet]: PWC1406: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
    at com.sun.faces.application.ApplicationImpl.createComponent(ApplicationImpl.java:975) …
Run Code Online (Sandbox Code Playgroud)

java jsf akamai jsf-2

13
推荐指数
1
解决办法
1万
查看次数

标签 统计

jsf ×2

jsf-2 ×2

akamai ×1

java ×1

resources ×1