我想将JScolor包含到我的jsf应用程序中。可以通过<script>
标记,但我的意思是通过<h:outputScript>
更多系统。
然而,它无法使用资源。 JSColor包含一个js文件和一些图片文件 - 看起来像是包含了js文件而没有重新存在。
有人可以告诉我为什么吗?以及如何解决这个问题?
谢谢。
答案 0 :(得分:12)
JS文件显然是通过相对路径引用图片文件,该路径不代表有效的JSF资源URL。
<h:outputScript>
生成一个JSF资源URL,该URL通过JSF资源处理程序,该资源处理程序担心自动本地化和版本控制。它会生成一个前缀为/javax.faces.resource
的网址,并附加当前使用的FacesServlet
网址映射,例如*.xhtml
或/faces/*
。
因此,如果您在*.xhtml
上映射了面部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元素的特殊自定义资源解析器,例如this one,那么您也可以使用普通的HTML <script>
元素代替<h:outputScript>
。
<script type="text/javascript" src="#{request.contextPath}/resources/jscolor/jscolor.js"></script>
答案 1 :(得分:2)
我可能会误解您的问题,但这段代码会有所帮助:
<script
type="text/javascript"
src="#{facesContext.externalContext.requestContextPath}/path/on/WebContent/foo.js"></script>
我经常使用这种java资源包含,而不是<h:outputScript>
答案 2 :(得分:0)
假设您的js文件的路径(名为jquery.js的文件)进入resources/js
文件夹,如下所示:
resources/js/jquery.js
然后你必须写:
<h:outputScript name="./js/jquery.js" target="body"/>
PS。注意属性目标(例如头部,身体)
答案 3 :(得分:0)
添加web.xml
<servlet-mapping>
<servlet-name>Resource Servlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>