JQuery TMPL и JSP код не играет красиво - PullRequest
8 голосов
/ 17 июня 2011

Я использую библиотеку 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. Но я не могу сказать, что установил это. Я разрабатываю на складе, текущий Tomcat для Windows 7 и создаю приложение в моей папке 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 ]

14 голосов
/ 17 июня 2011

Запись ${}: Язык выражений . Вы можете отключить его для каждого JSP на

<%@page isELIgnored="true" %>

Или для всего приложения: web.xml:

<jsp-config>
    <el-ignored>true</el-ignored>
</jsp-config>

Или, если вы действительно хотите использовать EL в другом месте в JSP, тогда вам просто нужно экранировать те, что в шаблоне jQuery, по \. Вы действительно хотели бы избежать старомодных скриптлетов .

<tr id="id_\${id}">

Или вы можете просто удалить весь этот JS-код в свой собственный JS-файл (если поддерживается jQuery tmpl).

6 голосов
/ 28 ноября 2012

Отключать 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>

note:в эл есть место,

6 голосов
/ 03 октября 2011

Используйте {{= variable_name}} вместо ${variable_name} в шаблонах jQuery.

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

2 голосов
/ 17 июня 2011

Вы можете защитить свой "$" от JSP, заключив в него обратную косую черту.

В JSP конструкция "$ {}" используется для представления конструкции языка выражений ("EL"). Например, если есть атрибут запроса с именем «firstName», вы можете получить имя с помощью:

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

Использование языка выражений, на мой взгляд, примерно в миллиард раз лучше, чем использование этого отвратительного синтаксиса "скриптлетов" ("<%"). Страницы намного, намного чище, и для отладки гораздо дольше. Я подозреваю, что существует множество действительно старых руководств и учебников по JSP, потому что JSTL и EL существуют уже много лет. </p>

0 голосов
/ 02 апреля 2012

Если вы не хотите экранировать все свои теги jQuery, вы можете создать отдельный JSP со всем вашим скриптом jQuery и поддерживать этот уникальный JSP, защищенный с помощью:

<%@page isELIgnored="true" %>

Тогда вы можете включить этот JSP, где это необходимо.

...