我想将 JScolor 包含到我的 jsf 应用程序中。可以通过<script>
标签,但我的意思是通过<h:outputScript>
.
但是,它不适用于资源。JSColor 包含一个 js 文件和一些图片文件 - 似乎包含 js 文件而没有包含资源。
谁能告诉我为什么?以及如何解决这个问题?
谢谢你。
我想将 JScolor 包含到我的 jsf 应用程序中。可以通过<script>
标签,但我的意思是通过<h:outputScript>
.
但是,它不适用于资源。JSColor 包含一个 js 文件和一些图片文件 - 似乎包含 js 文件而没有包含资源。
谁能告诉我为什么?以及如何解决这个问题?
谢谢你。
JS 文件显然是通过不代表有效 JSF 资源 URL 的相对路径引用图片文件。
生成一个 JSF 资源 URL,该<h:outputScript>
URL 通过 JSF 资源处理程序,其中担心自动本地化和版本控制。它将生成一个以 为前缀的 URL,/javax.faces.resource
并附加当前使用的FacesServlet
URL 映射,例如*.xhtml
或/faces/*
。
因此,如果您映射了 faces servlet*.xhtml
并有一个/resources/jscolor
包含 JS 和图像文件的文件夹,并且已经引用了 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
。只有当/javax.faces.resource
您在资源名称上应用 faces servlet 映射时,才会自动解析。因此,仅当您手动编辑jscolor.js
文件以将图像文件名从 eg 更改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 资源包含,而不是<h:outputScript>
添加 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"/>
PS。注意属性目标(例如头部,身体)