试图在jstl中获取并解析会话变量(xml字符串)

时间:2014-08-28 16:40:43

标签: java xml jsp servlets jstl

我有一个jsp servlet,用于查询数据库并返回一个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是xml字符串中“person”标记内的一个属性。

1 个答案:

答案 0 :(得分:2)

您的问题是您尝试在服务器端代码中使用JavaScript变量 你应该可以做到

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

或专门针对您可以做的会话

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

JavaScript对服务器端语言没有任何意义,它们只是视为通用文本。