jQueryTMPL和JSP代码没有很好地发挥作用

jQueryTMPL和JSP代码没有很好地发挥作用,jquery,jsp,el,jquery-templates,Jquery,Jsp,El,Jquery Templates,我已经在一些项目中使用了这个库,并且非常喜欢它 我没有在一个需要使用JSP的小项目上使用它,事情变得很奇怪。它没有完全发挥作用 <script id="servicesRow" type="text/x-jquery-tmpl"> <tr id="id_${id}"> <td>${name2}<br />${id}</td> <td>${supported_roles}</td&

我已经在一些项目中使用了这个库,并且非常喜欢它

我没有在一个需要使用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>
它仍然可用作模板,但jQueryTMPL无法完成它的工作。我有很多空行

语法与我为JSTL找到的一些文档相匹配。但我可以说,我没有安装那个。我正在开发Windows 7上的现有Tomcat,并从头开始在我的webapps/文件夹中构建一个应用程序。据我所知,我还没有启用任何类似的功能,而且我很惊讶bare
${}
正在被解析(而不是像
这样的东西,这在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>

${name2}
${id} ${supported_roles} 编辑 删除
非常感谢您的帮助或想法。谢谢!

您可以通过使用反斜杠引用来保护您的“$”免受JSP攻击

在JSP中,“${}”构造用于引入表达式语言(“EL”)构造。例如,如果有一个名为“firstName”的请求属性,则可以通过以下方式获得第一个名称:

<input type='text' name='firstName' value='${firstName}'>


在我看来,使用表达式语言比使用可怕的“scriptlet”语法(即“the
${}
符号是”)要好10亿倍左右

<%@page isELIgnored="true" %>
或者,如果您真的想在JSP中的其他地方使用EL,那么您只需通过
\
转义jQuery模板中的EL即可。您确实希望避免使用老式的Scriptlet



或者您可以将所有JS代码放在它自己的JS文件中(如果jQuery tmpl支持的话)。

在jQuery模板中使用
{{{=variable\u name}
而不是
${variable\u name}


如果您不想转义所有jQuery标记,您可以使用所有jQuery脚本构建一个单独的JSP,并用以下内容保护这个独特的JSP:


然后您可以在需要的地方包含此JSP。

关闭EL是不可取的,当JSP页面有其他EL时,您如何处理它, 您可以这样做:

<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>
<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>

{{=name2}
${id} {{=otherInfo} 编辑 删除


注意:El中有一个空格,

哦,伙计,我把反斜杠放在大括号上,而不是美元符号。当然这更符合逻辑。我会尝试各种配置。这让我再次运行!谢谢!
工作得很好。空的东西现在充满了数据!如果您在JSP或应用程序范围内禁用El,我想知道您的
.jsp
实际上不应该是一个
.html
文件.BalusC,也许吧。现在说还为时过早。我肯定还没有进入“最佳实践领域”"就JSP而言,我非常感谢stackoverflow可以快速确定发生了什么。我可以看到它的有用性,令人恼火的是,语法与jQuery tmpl重叠,但可能也很有用。谢谢!这是真的,但与@BalusC的答案是重复的。这不是重复。它使用相同的配置,但使用不同的原则我建议在一个独特的页面中创建一个集中的标签,并在需要时重用它。
<tr id="id_\${id}">
<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>