码迷,mamicode.com
首页 > 其他好文 > 详细

ognl表达式

时间:2016-11-25 00:39:47      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:表达   信息   就会   add   配置   []   pre   div   cti   

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表达式

标签:表达   信息   就会   add   配置   []   pre   div   cti   

原文地址:http://www.cnblogs.com/lxboy2009/p/6100074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!