最近换用jsp做前台时发现,在jsp页面中使用<c:if test="${IS_MANAGER == 'true'}">,提示"test" does not support runtime expressions。
这怎么可能呢?
查找tld文件发现:
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
rtexprvalue属性配置为false,可见不支持动态变量。这时想起来<%@taglib uri= "http://java.sun.com/jstl/core" prefix= "c" %>导入的taglib可能不对,查找资料得知:
<%@taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" %> 中支持动态变量。于是换下uri,问题解决。
当然如果要采用struts的<s:if test="">标签时,如下方案(error):
<s:set name="level" value="4"/>
<s:if test="${level== 4}">
high
</s:if>
<s:elseif test="${level == 3}">
middle
</s:elseif>
<s:elseif test="${level == 2}">
week
</s:elseif>
<s:else>no matter</s:else>
也会提示"test" does not support runtime expressions。
修改解决方案如下:
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:set name="level" value="4"/>
<s:if test="#level== 4">
high
</s:if>
<s:elseif test="#level == 3">
middle
</s:elseif>
<s:elseif test="#level == 2">
week
</s:elseif>
<s:else>no matter</s:else>
分析原因:$是EL表达式,#是ognl表达式。因此在使用struts的test标签时,动态取值最好使用#方式。