【发布时间】:2010-09-12 10:38:23
【问题描述】:
我有一个定义各种会话属性名称的类,例如
class Constants {
public static final String ATTR_CURRENT_USER = "current.user";
}
我想在 JSP 中使用这些常量来测试这些属性是否存在,例如:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.example.Constants" %>
<c:if test="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}">
<%-- Do somthing --%>
</c:if>
但我似乎无法正确获取语法。此外,为了避免在多个地方重复上述相当冗长的测试,我想将结果分配给本地(页面范围)变量,并改为引用它。我相信我可以使用 <c:set> 做到这一点,但我再次努力寻找正确的语法。
更新:根据以下建议,我尝试了:
<c:set var="nullUser" scope="session"
value="${sessionScope[Constants.ATTR_CURRENT_USER] eq null}" />
这没有用。因此,我尝试替换常量的字面值。我还将常量添加到页面的内容中,以便在呈现页面时验证常量的值
<c:set var="nullUser" scope="session"
value="${sessionScope['current.user'] eq null}" />
<%= "Constant value: " + WebHelper.ATTR_CURRENT_PARTNER %>
这很好,它在页面上打印了预期值“current.user”。我无法解释为什么使用字符串文字有效,但是当两者似乎具有相同的值时,对常量的引用却不起作用。帮助.....
【问题讨论】: