概述
1、OGNL表达式
1.1 简介
之前在web阶段学习过EL表达式,应用在JSP页面中获取域对象内容
用于struts2里面操作值栈数据,可以结合struts2里面的标签一起使用值栈
注意:ognl不属于struts2的一部分,他是单独存在的。struts2提供了ognl的jar包
1.2 ognl入门实例
第一步:导入jar包,然后引入标签库
之前在使用jstl的时候需要引入标签库,现在也一样,第一步是引入标签库
第二步:结合struts的标签
2、值栈(struts2提供的存放数据的区域)
我们之前把东西放到作用域中,现在可以用struts2提供值栈来存取数据。
2.1 servlet和action的区别
- servlet只在第一次访问的时候创建,创建一次,单实例
- action每次访问的时候,创建action
2.2 值栈存储位置
每次访问都会创建action,每个action对象拥有独立的一个值栈
2.3 获取值栈对象
用ActionContext对象获取值栈对象
2.4 值栈内部结构
第一部分:root,结构是list集合
一般操作都是root里面数据
第二部分: context,结构是map,存放一些固定的键值对
2.5 向值栈中放数据
s:debug标签(调试用)
访问action,执行action的方法,把方法的返回值配置到jsp页面中,在jsp里使用这个标签。
先有acton、再有值栈
通过debug,可以看到值栈的结构
2.5.1 放数据
方法1: 使用值栈对象里面的set方法
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
stack.set("username","laowang");
效果:栈顶多了个map
方法2:调用值栈里面的push方法
ActionContext context = ActionContext.getContext();
ValueStack stack = context.getValueStack();
stack.push("abcd");
效果:栈顶多了String
方法3:在action定义变量,生成变量的get方法。(不需要创建值栈对象)
效果:在action中添加了name ,数据分配在action中,不需要map等开销
2.5、 值栈中取数据
步骤: 使用struts2的标签+ognl表达式获取值栈数据
<s:property value=“ognl表达式”/>
前戏:放入数据(使用第三种放法)
(1)String username;
(2) User user;
(3) List<> list;
核心步骤:在jsp中取出数据
(1) <s:property value=“username”/>
(2) <s:property value=“user.username”/>
<s:property value=“user.passowrd”/>
(3) 对于list,由三种方式可以取数据
第一种方式
第二种方式:迭代器迭代
第三种方式:
类似foreach,遍历list集合,item:user
<s:iterator value="list" var="user">
<s:property value="#user.username"/>
</s:iterator>
解释#号:在这种机制下,帮我们从root中得到的值var存入context中
因此我们取值就要到context中取, 因此加上#表示context
使用set、push放数据时的取法
1、 set
前戏(action中):用set放数据
stack.set(“username”,“laowang”);
核心(jsp中):
<s:property value=“username”)/>
2、push(会把数据放到名称为top的数组,我们根据数组取值)
存:stack.push(“abcd”)
取:
至此,我们可以在struts2里面传递数据了
3、OGNL的# % 的使用
3.1 #号,用于取context域对象值
(1) 向request中放值
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("name","laowang");
(2)用ognl取值
(域对象通常用EL表达式就行,这里只是演示)
<s:proper value="#request.name"/>
3.1 %号,用于表单展示数据
如果直接在表单标签里面使用ognl表达式,会不识别,只有加%才能识别
写法:%{ognl表达式}
<s:textfield name="username" value="%{#request.username}></s:textfileld>
效果
4、实战,传递数据使用值栈
action中:使用第三种方式存入值栈
jsp中:
1、引入标签库
2、在单元格处使用表达式
这么写也是可以
最后
以上就是结实冰淇淋为你收集整理的SSH框架学习之struts2 ---- 3、值栈和ognl表达式的全部内容,希望文章能够帮你解决SSH框架学习之struts2 ---- 3、值栈和ognl表达式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复