我想包括jsccolor到我的jsf应用程序。通过<script>
标签是可能的,但我的意思是通过<h:outputScript>
更系统。
然而,它不能与资源一起工作。JSColor包含一个js文件和一些图片文件-看起来js文件包括在内,而资源没有。
谁能告诉我为什么?怎么解呢?
谢谢。
JS文件显然是通过一个不代表有效JSF资源URL的相对路径引用图片文件的。
<h:outputScript>
生成JSF资源URL,该URL经过JSF资源处理程序,该处理程序在其他自动本地化和版本控制中担心。它将生成一个以/javax.faces.resource
为前缀的URL,并附加当前使用的FacesServlet
URL映射,如*.xhtml
或/faces/*
。
因此,如果您在*.xhtml
上映射了faces servlet,并且有一个包含JS和图像文件的/resources/jscolor
文件夹,并按照如下方式引用了JS文件,
<h:outputScript name="jscolor/jscolor.js" />
那么它就会生成
<script type="text/javascript" src="/context/javax.faces.resource/jscolor/jscolor.js.xhtml"></script>
但是,镜像文件在/javax.faces.resource/jscolor
文件夹中是不可用的,而在/resources/jscolor
文件夹中是可用的。只有当您在资源名称上应用faces servlet映射时,才会自动解析/javax.faces.resource
。因此,只有当你手动编辑jscolor.js
文件以将图像文件名从例如arrow.gif
更改为arrow.gif.xhtml
时,这种特殊情况才会起作用。
如果您不利用JSF资源解析器的任何自动本地化或版本控制特性,也不使用任何需要真正的JSF资源而不是静态HTML元素的特殊自定义资源解析器,例如这个,那么您也可以直接使用普通的HTML <script>
元素而不是<h:outputScript>
。
<script type="text/javascript" src="#{request.contextPath}/resources/jscolor/jscolor.js"></script>
我可能误解了你的问题,但是这段代码可以帮助你:
<script
type="text/javascript"
src="#{facesContext.externalContext.requestContextPath}/path/on/WebContent/foo.js"></script>
我经常使用这种java资源include,而不是<h:outputScript>
add in web.xml
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
假设您的js文件的路径(文件名为jquery.js)到resources/js
文件夹,如下所示:
resources/js/jquery.js
那么你必须写:
<h:outputScript name="./js/jquery.js" target="body"/>
p。注意属性目标(如头部、正文)