通过h:outputScript包含带有资源的javascript

时间:2013-04-10 13:13:38

标签: javascript jsf jscolor

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

然而,它无法使用资源。 JSColor包含一个js文件和一些图片文件 - 看起来像是包含了js文件而没有重新存在。

有人可以告诉我为什么吗?以及如何解决这个问题?

谢谢。

4 个答案:

答案 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.gifarrow.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>