Попытка получить и проанализировать переменную сеанса (строка XML) в JSTL

1

У меня есть сервлет jsp, который запрашивает базу данных и возвращает строку xml, а затем устанавливает ее как атрибут сеанса, используя

session.setAttribute("directoryInfo", xmlString);

Затем я пытаюсь получить атрибут и проанализировать его с помощью jstl с помощью этого кода:

function renderResults(){

    var xmlString = <%=(String) session.getAttribute("directoryInfo")%>
    document.write("<ul class ='list'>");
    <x:parse xml="${xmlString}" var="output"/>

    <x:forEach select="$output/person">
    <x:set var="uid" select="string($output/person/@uid)"/>
    document.write("<li>uid: " + $uid + "</li>");
    </x:forEach>
}

Когда я развертываю его на tomcat, я сразу получаю сообщение об ошибке:

org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: org.xml.sax.SAXParseException; systemId: jstl :; lineNumber: 1; columnNumber: 1; Преждевременный конец файла.

Я думаю, что это имеет какое-то отношение к тому, как я передаю переменную.

Примечание: @uid - это атрибут в теге "person" в строке xml.

Теги:
jsp
servlets
jstl

1 ответ

2
Лучший ответ

Ваша проблема заключается в том, что вы пытаетесь использовать переменную JavaScript в серверном коде.
Вы должны уметь

<x:parse xml="${directoryInfo}" var="output"/>

или для конкретной целевой сессии, которую вы можете сделать

<x:parse xml="${sessionScope.directoryInfo}" var="output"/>

JavaScript ничего не значит для серверных языков, они просто рассматриваются как общий текст.

  • 0
    Та же проблема. Я думаю, что он может пытаться запустить JSTL, когда страница загружается. Я хочу, чтобы он запускался после публикации информации о форме, запуска запроса на основе информации (в jsp) и возврата строки xml. Я подумал обернуть jstl в функцию javascript, а затем использовать jquery для вызова функции после публикации данных формы, но без кубиков.
  • 0
    @ jordaniac89, что вы можете сделать, это использовать var xmlString = "<%=(String) session.getAttribute("directoryInfo")%>" как вы делали раньше (просто обратите внимание на кавычки), а затем использовать Javascript для анализа xmlString . Опять же, вам нужно узнать разницу между серверным и клиентским кодом. Javascript может работать только в клиентском браузере, и на данный момент JSTL отсутствует. Страница была сгенерирована и отправлена клиенту. Клиент тогда имеет дело только со статическим HTML
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню