jstl parse error: javax.servlet.jsp.JspTagException: Unrecognized object supplied as 'xml' attribute to parse

jstl parse error: javax.servlet.jsp.JspTagException: Unrecognized object supplied as 'xml' attribute to parse

我在 jsp(portlet 版本 1)项目中有一个 xml 的有效字符串。

我正在尝试使用 jstl 标签来解析它。 包含的标签库:

    <%@ page import="javax.portlet.*"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

目前我设置的字符串:

String activexml = (String)renderRequest.getPortletSession().getAttribute("activexml");

然后我为 jsp 页面设置我的属性:

pageContext.setAttribute("activexml", activexml);

一切正常,错误来了。当我去设置要解析的xml。 C 标签很好,没有返回错误,但 x 收到错误:

<c:set var="active-xml" scope="session" value="${activexml}"/>
<x:parse xml="${active-xml}" var="active"/>

javax.servlet.jsp.JspTagException: Unrecognized object supplied as 'xml' attribute to parse

我的项目中有 standard.jar 和 jstl.jar 的本地副本。任何帮助将不胜感激,我认为这是我的语法问题,或者我缺少一些项目设置 jar 或其他东西。

提前致谢。

你的错误在于声明的变量名。

<c:set var="active-xml" ... />

与 Java 一样,连字符在 EL 中被解释为减法运算符。 ${active-xml} 基本上会给你 ${active} 减去 ${xml} 的结果。

改用下划线。

<c:set var="active_xml" ... />

或者,更喜欢 Java 代码约定并使用驼峰式大小写。

<c:set var="activeXml" ... />

或者,直接使用原始值而不通过 <c:set> 复制它。

<x:parse xml="${activexml}" ... />