我一直在使用jQuery tmpl库进行某些项目,并非常喜欢它。
我没有在需要在JSP中的小项目中使用它,事情变得奇怪。它没有完全发挥作用。
<script id="servicesRow" type="text/x-jquery-tmpl">
<tr id="id_${id}">
<td>${name2}<br />${id}</td>
<td>${supported_roles}</td>
<td><button class="edit">Edit</button></td>
<td><button class="delete">Delete</button></td>
<td><a href="#">Show clients</a></td>
</tr>
</script>
我试图理解为什么没有数据显示出来。事实证明,页面中的文本发生了某种类型的解析,看起来像${foo}
。因此,当我在我的页面上查看源代码时,所有这些元素都已被替换,如下所示:
<script id="servicesRow" type="text/x-jquery-tmpl">
<tr id="id_">
<td><br /></td>
<td></td>
<td><button class="edit">Edit</button></td>
<td><button class="delete">Delete</button></td>
<td><a href="#">Show clients</a></td>
</tr>
</script>
哪个仍可用作模板,但jQuery tmpl无法完成其工作。我得到了很多空行。
语法与我为JSTL找到的一些文档相匹配。但我没有,我可以说,安装了。我正在开发库存,Windows 7上的当前Tomcat以及从头开始在我的webapps /文件夹中构建应用程序。我没有,我可以说,启用了这样的任何东西,我很惊讶裸${}
被解析(而不是更像<%= %>
的东西,这将更常见,因为PHP或ASP等。
所以我的问题是:如何关闭我的jQuery tmpl模板的解析行为?在全球范围内,本地到单个JSP,或逃避它(我已经尝试了额外的括号,我尝试过反斜杠,我尝试了各种引号)。我认为理想情况会有:
<foo:stopParsingMyDollarSignsAndBracesPlease>
<script id="servicesRow" type="text/x-jquery-tmpl">
<tr id="id_${id}">
<td>${name2}<br />${id}</td>
<td>${supported_roles}</td>
<td><button class="edit">Edit</button></td>
<td><button class="delete">Delete</button></td>
<td><a href="#">Show clients</a></td>
</tr>
</script>
</foo:stopParsingMyDollarSignsAndBracesPlease>
感谢任何帮助或想法。谢谢!
答案 0 :(得分:14)
${}
表示法是Expression Language。您可以通过
<%@page isELIgnored="true" %>
或者在web.xml
<jsp-config>
<el-ignored>true</el-ignored>
</jsp-config>
或者,如果你真的想在JSP的其他地方使用EL,那么你只需要通过\
来逃避jQuery模板中的那些。你真的想避免使用旧式的 scriptlet 。
<tr id="id_\${id}">
或者您可以将所有JS代码放在自己的JS文件中(如果jQuery tmpl支持)。
答案 1 :(得分:6)
在jQuery模板中使用{{= variable_name}}
代替${variable_name}
。
答案 2 :(得分:6)
关闭EL是不可取的,当jsp页面有其他el时,你如何处理它, 你可以这样做:
<script id="servicesRow" type="text/x-jquery-tmpl">
<tr id="id_{{= id}}">
<td>{{= name2}}<br />${id}</td>
<td>{{= otherInfo}}</td>
<td><button class="edit">Edit</button></td>
<td><button class="delete">Delete</button></td>
<td><a href="#">Show clients</a></td>
</tr>
注意:El中有一个空格
答案 3 :(得分:2)
您可以通过引用反斜杠来保护您的“$”。
在JSP中,“$ {}”构造用于引入表达式语言(“EL”)构造。例如,如果有一个名为“firstName”的请求属性,则可以使用以下命令获取第一个名称:
<input type='text' name='firstName' value='${firstName}'>
在我看来,使用表达式语言比使用那种可怕的“scriptlet”语法(“&lt;%”的东西)好十亿倍。页面更加清晰,并且可以避免调试。我怀疑有很多非常古老的JSP教学指南和教科书在那里浮动,因为JSTL和EL已经存在很多年了。
答案 4 :(得分:0)
如果您不想转义所有jQuery标记,可以使用所有jQuery脚本构建一个独立的JSP,并保留这个由以下内容保护的唯一JSP:
<%@page isELIgnored="true" %>
然后,您可以在需要的地方包含此JSP。