struts2(三)

来源:互联网 发布:小米4没有4g网络设置 编辑:程序博客网 时间:2024/05/18 01:46
OGNL:它就是一种表达式,像EL表达式一样。这个表达式一般和struts2标签一起使用来在struts2里面操作值栈数据,它不是struts2的一部分。


例如:使用struts2和ognl表达式来计算字符串的长度。<s:property value="'hello'.length()"/>


值栈:在strut2里面提供了一种存储机制,类似于域对象,可以存值和取值。在action里面可以把数据放到值栈里面,在页面中获取值栈中的数据。


servlet和action的区别:
servlet:默认在第一次访问的时候创建,而且只创建一次,单实例对象。
action:访问的时候创建,每次访问action的时候都会创建action的对象,多实例对象。

值栈的储存位置:每次访问action的时候都会创建action对象,在每个action对象里面都会有一个值栈对象。


获取值栈对象的多种方式:
常用的:使用ActionContext类里面的方法getValueStack();

值栈的内部结构:
第一部分:root 结构为list,我们一般都是操作root中的数据。
第二部分:context 结构是map


向值栈中存放数据:
第一种:获取值栈对象,调用里面的set方法。
ActionContext context=ActionContext.getContext();
ValueStack stack=context.getValueStack();
stack.set("name","tom");
获取set方法存放的值就是直接用名称获取。<s:property value="name"/>
取出来的是tom
第二种:获取值栈对象,调用里面的push方法。
第三种:(最常用,向值栈中存放对象或者集合也是一个套路)在action中定义一个变量,生成这个变量的get方法,在执行的方法里面给变量赋值。这种做法直接把值放入action里面,而上面两种在action中重新分配空间。


从值栈中获取值:就是上面举的例子,用strut2标签和ognl表达式获取。但是获取list集合的值的方法值得注意。第一种,用struts2里面的<s:iterator value="list">
遍历list集合得到每个user对象
<s:property value="username"/>
<s:property value="password"/>
</iterator>

第二种,<s:iterator value="list" var="user">
遍历list集合得到每个user对象,然后存到context中去。
获取context里面数据的:写ognl表达式,使用#
<s:property value="#user.username"/>
</s:iterator>
原创粉丝点击