项目中经常会有一些业务类型存放在数据库中需要保存成数字或者字母,然后再页面上显示的时候需要转换成字符串。
直接存放在数据中又怕级联的表态多,每次存取速度慢。
现在采用静态类加Ognl来实现页面的动态显示。
首先配置文件中需要添加一下支持ognl读取静态方法的配置
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
然后是存放所有的业务类型的类:
package com.test.action;
import java.util.HashMap;
import java.util.Map;
public class BizType {
public static Map<String, String>BOOLEANTYPE;
static{
System.out.println("执行静态代码块");
BOOLEANTYPE=new HashMap<String, String>();
BOOLEANTYPE.put("1", "yes");
BOOLEANTYPE.put("2", "no");
}
}
jsp页面:
<s:iterator value="{1,2}" id="vo">
<s:property value="#vo"/>
value: <s:property value='@com.test.action.BizType@BOOLEANTYPE[#vo.toString()]'/><br/>
</s:iterator>
<!-- 直接从action获取值的时候需要这么设置-->
<s:set name="flagP" value="%{json}" />
<s:property value='@com.test.action.BizType@BOOLEANTYPE[\"#flagP\"]'/>
<s:debug></s:debug>
需要注意的是,map中的key如果是数字的话,直接取将无法取到,需要用#vo.toString()
大家如果还有其他更好的方法可以拿出来一起讨论,学习。