strut2之ognl表达式

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页面是给四个输入框,则可以不用转换器。

==============================

ActionContext与ognl

ognl表达式可以解析任何对象,值栈是其中之一,而且是默认值。

ActionContext包含了所有范围的数据,共六个(valuestack,request,session,application,attr,parameters)。

parameters:是request中的请求参数封装到一个map集合中的数据。

request:是request范围内attribute属性数据,即通过request.setAttribute()设置的数据。

session:是session范围内attribute属性数据,即通过session.setAttribute()设置的数据。

application:是application范围内的attribute属性数据,即通过application.setAttribute()设置的数据。

attr:是从page,request,session,application四个域中查找数据,按照这个查找顺序找到的第一个数据。

ValueStack:即action中的数据,action中的数据都会放到值栈中。

ognl表达式可以从这六个范围内取数据,每个ognl表达式解析的时候都需要一个根对象(即需要指定一个域,默认的根对象是值栈)。即默认是从值栈中取数据。

选取session作为根对象,#session['user'] 表示:从session中取key值为user的对象。相对于session.getAttribute("user");  默认情况下ValueStack是根对象。

#表示命名对象, 除了可以用ognl取值,还可以用EL表达式。

ActionContext:数据中心,Threadlocal

{

  Map context

}

OgnlContext实现了Map接口。

ognl表达式可以解析任何对象,值栈是其中之一,而且是默认值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值