ognl表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ognl表达式相关的知识,希望对你有一定的参考价值。
action对象是存储在值栈中的,页面提交的数据会通过ognl给action中的属性及对象赋值,页面取值的时候,也是通过ognl从值栈中获取。
所以数据的传输是通过struts内置的ognl表达式及类型转换来完成,struts内置了类型转换器,来转换八种基本的数据类型。其他的数据类型需要自己手动写类型转换器来实现。
内置的转换器可以转换日期,但是只支持yyyy-MM-dd这种类型,如果需要其他的日期类型,需要自己开发类型转换器。
地址类型转换器:将字符串类型的地址转成地址对象
应用场景:假设在action中有个属性,地址类,private Address comAddress;
jsp页面为了简化,并没有给address类的每个字段一个输入框,而是只给一个输入框<s:textfield name="comAddress" label="comAddress"/>
让用户输入公司地址的时候,输入如下信息:福建-厦门-思明-xx街道,
如果是这样用户提交jsp页面的时候,ognl会把该输入地址(字符串)赋值给comAddress对象,这样就会出现类型不匹配的报错,为了解决这个问题
必须把用户输入的字符串地址,转换为Address的类型。
当然如果jsp页面是给四个输入框,则可以不用转换器。
/** * 地址类型转换器 */ public class AddressConverter extends StrutsTypeConverter { /** * 将字符串转换成地址对象 */ public Object convertFromString(Map context, String[] values, Class toClass) { if(values != null && values.length > 0){ String str = values[0]; String[] ss = str.split("-"); if(ss != null && ss.length > 2){ Address a = new Address(); a.setProvince(ss[0]); a.setCity(ss[1]); a.setStreet(ss[2]); return a ; } } return null; } /** * 将地址对象转换成字符串信息 */ public String convertToString(Map context, Object o) { if(o instanceof Address){ return o.toString(); } return null; } }
xwork-conversion.properties配置文件。要放在src根目录下
struts2.model.Address=struts2.ognl.AddressConverter
地址类:
/** * 地址类 */ public class Address { private String province; private String city; private String street; public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String toString() { return province + "-" + city + "-" + street; } }
数据存储:
ServletActionContext.getRequest().setAttribute("username", "requestTom"); ServletActionContext.getRequest().getSession().setAttribute("username", "sessionTom"); ServletActionContext.getServletContext().setAttribute("username", "applicationTom"); ServletActionContext.getContext().getValueStack().set("username", "vsTom");
以上是关于ognl表达式的主要内容,如果未能解决你的问题,请参考以下文章