JSTL:启用c:设置为接受表达式作为变量名

时间:2015-02-19 23:41:11

标签: jstl

我试图模块化我的JSTL代码。需要在JSP内的许多地方调用特定代码,因此我将其在单独的INC文件中分离出来。在我的JSP中,我使用<%@ include file="snippet.inc" %>包含该文件。该代码段需要处理页面上下文中的某些变量,由调用者确定。

我将相关变量的 NAME 存储在名为__var的变量中,该变量将由代码段使用。我们期望该代码段会读取并修改名称通过pageScope传递的__var中的实际变量。

JSP文件:

<c:set var="name1" value="Admin"></c:set>
<c:set var="name2" value="Moderator"></c:set>

<c:set var="__var" value="name1"></c:set>
<%@ include file="snippet.inc" %>
${name1}


<c:set var="__var" value="name2"></c:set>
<%@ include file="snippet.inc" %>
${name2}

INC文件:

<c:set var="__value" value="${pageScope[__var]}"></c:set>
<c:set var="${pageScope[__var]}"> Hello ${__value} </c:set>

第一行工作正常,我可以读取变量名的值。第二行不起作用,并抱怨我不能将表达式用作变量名。

如何处理此问题?

1 个答案:

答案 0 :(得分:1)

这些东西让你意识到StackOverflow是多么美妙的东西!找到并修改了https://stackoverflow.com/a/8750411/1101040的解决方案以实现我的目标。

<c:set var="__value" value="${pageScope[__var]}"></c:set>
<c:set target="${pageScope}" property="${__var}"> Hello ${__value} </c:set>

全套! :)