在JSF页面中,我使用以下代码来包含一个JS文件:
<h:outputScript library="js" name="reworkBase.js" />
它工作得很好,但我想通过添加一个版本参数来实现缓存破坏:
<h:outputScript library="js" name="reworkBase.js?version=1" />
但是找不到JS文件。我知道它也工作得很好,如果我使用<script type="text/javascript">
标签。但是有没有办法实现与<h:outputScript>
标签?
这是Mojarra的一个bug。他们的ScriptRenderer
按照issue 1212被修复以支持查询字符串。但是,对于指定了library
的情况,他们的修复是错误的。他们使用+
而不是&
作为查询字符串参数分隔符,这只会导致404的结果:
<script src="/context/javax.faces.resource/reworkBase.js.xhtml?ln=js+version=1">
应该是:
<script src="/context/javax.faces.resource/reworkBase.js.xhtml?ln=js&version=1">
我已经把这个bug报告为2168号问题。
与此同时,你最好的选择是完全省略library
,考虑到js
的库名(显然代表"JavaScript"),你似乎对使用可配置的外观/脚本库根本不感兴趣。
<h:outputScript name="js/reworkBase.js?version=1" />
这将产生正确的URL。
<script src="/context/javax.faces.resource/js/reworkBase.js.xhtml?version=1">