使用struts, 在jsp页面中,可以通过ognl访问类的静态方法。
表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar')
在目前的项目中,我们使用了struts最新的版本2.1.2,当我在jsp页面中使用ognl访问类的静态方法时,发现不起作用。也没报错信息,找不到原因。网上搜了一下,也未发现相同经历的人。当我把struts的版本降到2.0.11时,发现是可以访问静态方法的,困惑!
最后终于发现了原因,原来是在2.1.2中,如果要通过ognl访问静态方法,必须在struts.properties或者struts.xml中将选项struts.ognl.allowStaticMethodAccess设置为true
struts.properties
struts.ognl.allowStaticMethodAccess=false
struts.xml
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
例如:
<s:property value="@java.lang.String@format('foo %s', 'bar')"/>
<s:property value="@com.dw.knowledge.global.GGlobals$SYSTEM@WEB_ROOT"/>
<s:property value="@com.dw.knowledge.global.GGlobals$SYSTEM$SystemCodeStyle@MAIL_SERVER.name()"/>
<s:property value="@com.dw.knowledge.global.GGlobals$SYSTEM$SystemCodeStyle@MAIL_SERVER.ordinal()"/>
<s:property value="@com.dw.knowledge.global.GGlobals@SYSTEM@containsLimitWord('22')"/>
<s:property value="@com.dw.knowledge.util.CalendarUtil@getCalenDarUtilDate('1')"/>
<s:property value="@com.dw.knowledge.util.CalendarUtil@format0"/>
<s:property value="@com.dw.knowledge.util.CalendarUtil@format1"/>
访问枚举
public class CommonConst {
public enum RunModel {
ADD, UPDATE
};
}
<s:property value="@edu.leo.common.CommonConst$RunModel@ADD"/>
----------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示用户信息</title>
</head>
<body>
<s:iterator id="it" value="list" status="st">
list是action中的
</s:iterator>
<s:debug></s:debug>
</body>
</html>
也可以采用如下方式
public enum Gender {
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>显示用户信息</title>
</head>
<body>
<s:iterator value="list">
</s:iterator>
<s:debug></s:debug>
</body>
</html>
struts2标签真是强大
----------------------------
另一种判断方法
枚举定义
public class CommonConst {
public enum RunModel {
ADD, UPDATE
};
}
action属性
private CommonConst.RunModel runModel;
jsp判断
<%-- s:if 和枚举比较 --%>
<s:if test="runModel.toString() == @edu.leo.common.CommonConst$RunModel@ADD.toString()">
add
</s:if>
<s:else>
update
</s:else>