Теги JSTL возвращают ноль / пусто в вызовах Javascript и элементах HTML - PullRequest
0 голосов
/ 26 января 2011

Это действительно сбивающая с толку ошибка, поскольку она возникает на некоторых веб-страницах, которые я создаю, но не на других, хотя синтаксически элементы идентичны.

Например, это не отображается:

            <main:uiInputBox
                onDarkBG="${hasDarkBG}"
                name="questionTitle1"
                onblur="pollUpdateQuestion(false, false, true, this);"
                defaultValue="&lt;${field['POLL_FIELD_ENTER_QUESTION']}&gt;"
                styleWidth="280px">
            </main:uiInputBox>

Где тег ${field['POLL_FIELD_ENTER_QUESTION']} должен возвращать строку «введите вопрос». Что я не понимаю, так это то, что тег обычно возвращает строку в файле JSP, но теперь, когда он находится в дескрипторе HTML.

Другая ошибка заключается в том, что в JavaScript, если у меня есть такая функция:

Он печатает буквенную строку "${field['POLL_FIELD_CHOICE']}", а не элемент, который он представляет. Пример:

template.find('h2').text('${field["POLL_FIELD_CHOICE"]} ');

Что я здесь не так делаю и как это исправить?

1 Ответ

0 голосов
/ 26 января 2011

Что касается первой проблемы EL, не решаемой в пользовательском теге, это не JSTL (это те <c:xxx> теги). Это EL (эти ${} вещи).

Вы, кажется, используете EL в пользовательском теге. <main:xxx> не принадлежит какой-либо стандартной библиотеке тегов JSP (посмотрите, это то, что означает JSTL). Чтобы заставить EL работать с пользовательскими тегами, вам необходимо убедиться в следующем:


Что касается второй проблемы EL, не решаемой в файле JavaScript, то объяснение довольно простое: EL в тексте шаблона, подобном тому, который выполняется в файлах JSP (2.0 или новее) только с расширением .jsp. Есть несколько способов заставить его работать в любом случае:

  • Переименуйте .js в .jsp и добавьте следующую строку в начало страницы (лучшее решение):

    <%@page contentType="text/javascript" %>
    
  • Поместите этот фрагмент JS в строку <script> на странице JSP (не рекомендуется, поскольку это обычно считается плохой практикой).

  • Отображение *.js в сервлете JSP в web.xml (не рекомендуется, поскольку оно жестко связывает ваше веб-приложение с конкретным JspServlet контейнера сервлетов, который может не обязательно отображаться на имя сервлета jsp).

    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...