在PHP中,我们可以在Variable variables in PHP的帮助下执行以下操作:
$privateVar = 'Hello!';
$publicVar = 'privateVar';
echo $$publicVar; // Hello!
假设我们有以下Java代码:
request.setAttribute("privateVar", "Hello!");
request.setAttribute("publicVar", "privateVar");
我已尝试以下操作但发生错误。
${${publicVar}}
有没有人知道如何通过在JSP(JSTL)中仅使用privateVar
来获取publicVar
的值?
更新1 :
我有一个自定义标记,如果对象foo
没有字段bar
,则可以打印消息。
我知道我必须在案例中捕获异常,但我不想在JSP中处理异常。我想只在CustomTag文件中执行此操作。
<%-- JSP file --%>
<ctf:tagName varName="foo.bar" />
<%-- CustomTag file --%>
<%@ attribute name="varName" required="true" rtexprvalue="true"%>
<c:catch var="exception">
<c:set var="valX" value="${${varName}}" scope="page"/>
</c:catch>
<c:if test="${exception != null}">Can't find getter for the VAR in the OBJ.</c:if>
更新2 :
JB Nizet 给了我答案,以下效果很好! :)
<c:set var="privateVar" value="Hello!" />
<c:set var="publicVar" value="privateVar" />
${pageScope[pageScope.publicVar]}
答案 0 :(得分:0)
基础知识:
那不是JSTL而是Expression Language。而且您应该只使用一个${}
评估程序。代码是:
${publicVar}
更多信息:
解决您的问题:
表达语言不允许这样做。您不能在任何范围(页面,请求,会话,应用程序)中拥有私有属性,因此您最多可以使用不同的名称设置属性两次但值相同。但是你可能会注意到,这没用。
答案 1 :(得分:0)
我不认为您可以像在PHP中一样直接执行此操作。相反,您可以更改属性以使用privateVar
的值而不是名称,如下所示:
String privateVar = "Hello!";
request.setAttribute("privateVar", privateVar);
request.setAttribute("publicVar", privateVar);
这使您可以访问两个名称下的值,我认为这是您最接近的名称。如果您最终要在JSP上使用privateVar
,则无需在请求中放置属性publicVar
。
最终你可能想重新考虑这里的设计,因为它在Java中并没有真正起作用。