4

我想将 JScolor 包含到我的 jsf 应用程序中。可以通过<script>标签,但我的意思是通过<h:outputScript>.

但是,它不适用于资源。JSColor 包含一个 js 文件和一些图片文件 - 似乎包含 js 文件而没有包含资源。

谁能告诉我为什么?以及如何解决这个问题?

谢谢你。

4

4 回答 4

13

JS 文件显然是通过不代表有效 JSF 资源 URL 的相对路径引用图片文件。

生成一个 JSF 资源 URL,该<h:outputScript>URL 通过 JSF 资源处理程序,其中担心自动本地化和版本控制。它将生成一个以 为前缀的 URL,/javax.faces.resource并附加当前使用的FacesServletURL 映射,例如*.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.gifarrow.gif.xhtml.

如果您不使用 JSF 资源解析器的任何自动本地化或版本控制功能,也不使用任何需要真正 JSF 资源而不是静态 HTML 元素的特殊自定义资源解析器,例如这个,那么您也可以继续一个普通的 HTML<script>元素,而不是<h:outputScript>.

<script type="text/javascript" src="#{request.contextPath}/resources/jscolor/jscolor.js"></script>
于 2013-04-10T13:48:28.437 回答
3

我可能会误解你的问题,但这个片段会有所帮助:

<script
    type="text/javascript"
    src="#{facesContext.externalContext.requestContextPath}/path/on/WebContent/foo.js"></script>

我经常使用这种 java 资源包含,而不是<h:outputScript>

于 2013-04-10T13:31:54.010 回答
0

添加 web.xml

<servlet-mapping>
  <servlet-name>Resource Servlet</servlet-name>
  <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
于 2014-10-22T15:20:51.280 回答
0

假设您的 js 文件的路径(名为 jquery.js 的文件)进入resources/js如下文件夹:

resources/js/jquery.js

然后你必须写:

<h:outputScript name="./js/jquery.js"  target="body"/>

PS。注意属性目标(例如头部,身体)

于 2014-06-19T06:26:20.707 回答