c:set在JSTL 1.2中不起作用

时间:2013-09-16 14:08:42

标签: xml jstl

我正在基于xml制作动态菜单。将解析此XML并构建最终菜单。 xml是:

<menus>
    <menu>
        <name>menu.level1.Home</name>
        <action>transfer-to-account-input</action>
    </menu>
    <menu>
        <name>menu.level1.Accounts</name>
        <action>accounts-summary</action>
    </menu>
</menus>

我使用jstl来解析XML。 x:set似乎无法正常工作!

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>

<x:forEach select="$docRoot/menus/menu" var="menuvar">
    <x:set select="$menuvar/name" var="menuName1" >
    <c:set var="menuName2">
        <x:out select="$menuvar/name" />
    </c:set>
    ${menuName1} //This doesn't show any thing
    ${menuName2} //This works!
</x:forEach>

我犯了错误,或者这是JSTL 1.2中的错误

1 个答案:

答案 0 :(得分:1)

x:set的语法使用XPath变量语法引用$menuVar,但menuVar是JSTL变量。它应该是:

<x:set select="$pageScope:menuvar/name" var="menuName1" >
  

使用JSTL数据作为XPath变量     可以在XPath表达式($ implicitObject:variableName)中使用Scoped变量,类似于它们在EL中的使用方式($ {implicitObject.variableName})。如果省略隐式对象,则将按标准顺序搜索范围。请注意,“。”和“[]”符号不能用于访问bean属性。

<强>参考