jQuery tmpl和JSP代码打得不好

时间:2011-06-17 00:14:44

标签: jquery jsp el jquery-templates

我一直在使用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>

感谢任何帮助或想法。谢谢!

5 个答案:

答案 0 :(得分:14)

${}表示法是Expression Language。您可以通过

在每个JSP的基础上关闭它
<%@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}

https://github.com/jquery/jquery-tmpl/issues/56

答案 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。