时间:2011-06-27 11:25:16

标签: jsp jstl

我正在使用c:set和c:if在jsp中(我正在使用Spring MVC 3)

<c:set var="myVar" value="${JavaClass.MY_KEY}"/>  
<c:if test="${myVar == code}">  
    Do Somthing  
</c:if>  

但在这种情况下c:如果代码没有被执行。

当我给(没有c:设置)时

<c:if test="${'ABC' == code}">  
    Do Somthing  
</c:if>     

它有效。

谁能告诉我我做错了什么

由于

2 个答案:

答案 0 :(得分:4)

${JavaClass.MY_KEY}在页面中查找对象,然后请求,然后是会话,然后是应用程序范围,存储在JavaClass属性名称下。如果找到一个,则会在此对象上调用方法getMY_KEY()

我怀疑这不是你认为这个表达式所做的。由于在任何范围内都没有这样的对象,因此它会计算为空字符串(或者为空,我无法肯定地说)。

无法使用JSP EL访问类常量。你可以做的最好的事情是在某个范围内存储一些对象,getter返回常量。

答案 1 :(得分:4)

您无法使用JSP EL直接访问JavaClass.MY_KEY,但您可以使用Scriptlet one-liner *来执行此操作。

<c:set var="myVar" value="<%=JavaClass.MY_KEY%>"/>

*通常,应该避免使用scriptlet,但是这些可以引用静态字段和枚举常量的单行代码在JSP EL提供更好的访问方式之前是有用的。