如何通过h:outputScript包含JavaScript文件?

时间:2012-02-01 08:49:29

标签: jquery jsf-2 facelets jquery-validate

我想将jQuery Validate插件与JSF一起用于客户端表单验证。我发现导入资源存在基本困难。

在我的JSF页面中我有

<h:outputScript library="js" name="jquery-1.6.2.js"></h:outputScript>
<h:outputScript library="js" name="jquery.validate.js"></h:outputScript>
<h:outputScript library="js" name="jquery.maskedinput.js"></h:outputScript>
<h:outputScript library="js" name="myapp.validate.js"></h:outputScript>

当我点击Firefox中的脚本选项卡时,我无法在下拉列表中看到任何脚本文件。显示一条消息:

  

如果标签具有“type”属性,则它应该等于“text / javascript”或“application / javascript”。脚本也必须是可解析的(语法正确)。

我的jquery效果如鼠标悬停,隐藏,显示等不起作用。我尝试使用通常的脚本标签

<script type="text/javascript" src="../js/jquery-1.6.2.js"></script>
<script type="text/javascript" src="../js/jquery.validate.js"></script>
<script type="text/javascript" src="../js/jquery.maskedinput.js"></script>
<script type="text/javascript" src="../js/myapp.validate.js"></script>

哪个没用。仍然无法找到我的JS文件。我的所有JS文件都放在

   Web pages
       |_ js
           |_jquery-1.6.2.js,my.validate.js,jquery.validate.js,jquery.maskedinput.js

我尝试了Using jQuery with JSF 2.0's resource发布的其中一个解决方案,但没有成功。

请建议我解决这个问题。我不想在ajax中使用JSF内置验证,因为我们将代码从JSP移到JSF并且已经编写了验证。我想重用我之前写过的现有jQuery验证。

1 个答案:

答案 0 :(得分:27)

<h:outputScript>(和<h:outputStylesheet>)从/resources文件夹加载资源。您需要将脚本放在该文件夹中。

WebContent
|-- resources
|    `-- js
|        |-- jquery-1.6.2.js
|        |-- myapp.validate.js
|        |-- jquery.validate.js
|        `-- jquery.maskedinput.js
|-- WEB-INF
:

然后以下脚本声明应该有效:

<h:outputScript name="js/jquery-1.6.2.js" />
<h:outputScript name="js/jquery.validate.js" />
<h:outputScript name="js/jquery.maskedinput.js" />
<h:outputScript name="js/myapp.validate.js" />

(请注意,我省略了library属性,因为名称“js”并不表示real library

您的<script>方法失败可能是由于使用了错误的相对路径造成的。您需要意识到资源是相对于当前请求URL解析的,而不是它们在服务器端磁盘文件系统中的路径。