struts2 ongl 访问静态变量与访问枚举

使用struts, 在jsp页面中,可以通过ognl访问类的静态方法。

表达式的格式为@[类全名(包括包路径)]@[方法名 | 值名],例如:@java.lang.String@format('foo %s', 'bar') 。页面的输出结果就是:foo 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"/>


----------------------------------------


struts2 if标签和枚举比较


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="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">

<s:property value="username" />---<s:property value="password" />--<s:property

value="gender" />----- 

  <s:if test="gender.toString()==@cn.ssh.domain.Gender@MAN.toString()">男</s:if>

<s:else>女</s:else>

--

<s:if test="gender.toString()=='MAN'.toString()">男</s:if>

<s:else>女</s:else>

<br>

list是action中的

</s:iterator>

<s:debug></s:debug>

</body>

</html>


也可以采用如下方式


public enum Gender {

MAN {

public String getSex() {

  return "男";

}

},

WOMEN{

public String getSex() {

  return "女";

}

};

}


<%@ page language="java" contentType="text/html; charset=UTF-8"

pageEncoding="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:property value="username" />---<s:property value="password" />--<s:property value="gender.sex" />

 

<br>

</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>

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值