【Struts2五】ValueStack以及ognl表达式一(概述)
来源:互联网 发布:nat穿透软件 编辑:程序博客网 时间:2024/06/05 04:21
1.ValueStack概述:
在传统的servlet中,往jsp页面传递数据是靠request域,session域以及ServletContext域中存数据,然后再jsp页面通过el表达式将数据显示出来!
valueStack是Struts2的存储数据的结构!
ognl是在页面上读取valueStack的值并显示出来!类似于el表达式!
ValueStack是接口,OgnlValueStack是实现方式!
valueStack的生命周期是一次请求!因为放在request域中!
valueStack的内存结构:
map栈就是OgnlContext中的_values(是一个HashMap()),使用put方法放入元素!
对象栈就是valueStack中的root(是一个ArrayList),使用push方法放入元素!
传统的servlet中的各大作用域放在map栈中!
2.获取valueStack的三种方式:
/**
* 获取valueStack的途径
* @return
*/
public String valueStackMethod(){
ActionContext. getContext().getSession().put("aaa", "afdsadsf");
ValueStack valueStack = ActionContext.getContext().getValueStack();//常用方法
ValueStack valueStack2 = ServletActionContext.getValueStack(ServletActionContext. getRequest());
ValueStack valueStack3 = (ValueStack)ServletActionContext. getRequest().getAttribute("struts.valueStack");//在request域中,所以valueStack的生命周期就是一次请求!
System. out.println(valueStack);
System. out.println(valueStack2);
System. out.println(valueStack3);
return null ;
}
3.将数据放入到ValueStack中:
/**
* 将数据放入域中,#request.msg_request,#session.msg_request,...来取数据;
* @return
*/
public String putDataToDomain(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
ServletActionContext. getRequest().setAttribute("msg_request", "msg_request");
ServletActionContext. getServletContext().setAttribute("msg_application", "msg_application");
ActionContext. getContext().getSession().put("msg_session", "msg_session");
return "domain" ;
}
/**
* 将数据放入map栈中;#map
* @return
*/
public String putDataToMap(){
ActionContext. getContext().put("map", "map_value");
return "map" ;
}
/**
* 将map放入到request域中,#request.map.name
* @return
*/
public String putMapToRequest(){
Map<String, String> map = new HashMap<String, String>();
map.put( "name", "zhangsan" );
ServletActionContext. getRequest().setAttribute("map", map);
return "request_map" ;
}
/**
* 将map放入到map栈中;#map.name
* @return
*/
public String putMapToMap(){
Map<String, String> map = new HashMap<String, String>();
map.put( "name", "lisi" );
ActionContext. getContext().put("map", map);
return "map_map" ;
}
/**
* 把数据存放到对象栈
*/
public String putDataToObjectStack(){
ValueStack valueStack = ActionContext.getContext().getValueStack();
/**
* 可以把数据存放在对象栈的尾部
*/
valueStack.getRoot().add("aaaaa");
//栈顶
valueStack.getRoot().add(0,"adsf");
//栈顶
valueStack.push( "rtrt");
/**
* 把" aaasdf"和"asfd"封装成了一个map,把map放入到栈顶
*/
valueStack.set( "aaasdf", "asfd" );
/**
* 怎么样获取栈顶的元素
*/
valueStack.peek();
valueStack.getRoot().get(0);
/**
* 弹出栈顶元素
*/
valueStack.getRoot().remove(0);
valueStack.pop();
return null ;
}
/**
* 将bean防到对象栈中,直接使用属性的名字即可,<s:property value=" username"/>
* @return
*/
public String putObjToObjStack(){
User user = new User();
user.setPassword( "123");
user.setUsername( "zhangsan");
ActionContext. getContext().getValueStack().push(user);
return "obj_objstack" ;
}
/**
* 将字符串直接放到对象栈中,<s:property />获取的是对象站栈栈顶的内容
* @return
*/
public String putStringToObjStack(){
ActionContext. getContext().getValueStack().push("strdata");
return "str_objstack" ;
}
/**
* 将map放到对象栈中,使用<s:property value="key"/>获取值
* @return
*/
public String putMapToObjStack(){
Map<String, String> map = new HashMap<String, String>();
map.put( "key", "value" );
ActionContext. getContext().getValueStack().push(map);
return "map_objstack" ;
}
/**
* 在对象栈中存放几个对象,在这几个对象有相同的属性,<s:property value="username"/> ,从栈顶开始找,找到就不往下找了。
* * @return
*/
public String putSameFiledToObjStack(){
User user = new User();
user.setUsername( "user");
user.setPassword( "afd");
Person person = new Person();
person.setUsername( "person");
person.setPid( "1");
this.username = "ognlAction" ;
ActionContext. getContext().getValueStack().push(user);
ActionContext. getContext().getValueStack().push(person);
return "samefiled_objstack" ;
}
/**
* 在对象栈中存放map和一个bean,map中的key值和bean中的属性值保持一致,怎么办? 也是从栈顶开始找,找到就不找了。
*/
public String putMapAndBeanToObjStack(){
Map<String, String> map = new HashMap<String, String>();
map.put( "username", "zhangsan" );
Person person = new Person();
person.setUsername( "lisi");
ActionContext. getContext().getValueStack().push(person);
ActionContext. getContext().getValueStack().push(map);
return "map_bean_objstack" ;
}
4.在jsp页面获取数据:
<%@ page language="java" import= "java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="/struts-tags" prefix= "s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body >
This is my JSP page. <br>
<s:debug ></s:debug>< br/>
1.访问request,session,application域中的内容: <br/>
<!--
s:property是一个输出标签,value的值就是 ognl表达式的值
-->
request:<s:property value="#request.msg_request" /><br/>
session:<s:property value="#session.msg_session" /><br/>
session['']:<s:property value="#session['msg_session']" /><br/>
application:<s:property value="#application.msg_application" /><br/>
attr:< s:property value ="#attr.msg_request"/>< br/>
2. 把数据存放在map中,提取 <br/>
<s:property value="#map"/>< br/>
3.在request域中存放一个 map: <br/>
<s:property value="#request.map.afds"/>< br/>
4. 在map栈中存放一个map <br/>
<s:property value="#map.afds"/>< br/>
5. 在对象栈中有一个对象user: <br/>
<!--
把一个对象放入到对象栈中,其属性可以直接访问
-->
usrename:< s:property value ="username"/>< br/>
password:<s:property value="password"/>< br/>
6.在对象栈中有一个对象String: <br/>
<!--
如果property标签value属性不写,默认输出栈顶的元素
-->
<s:property /><br/>
7.在对象栈中有一个对象为map: <br/>
<s:property value="afds"/>< br/>
8.在对象栈中有几个对象,这几个对象有相同的属性,获取哪个? <br/>
<!--
如果在对象栈中出现了几次相同的属性,则struts2内部会从栈顶依次查找,找到为止,输出
-->
<s:property value="username"/>< br/>
9.在对象栈中有两个对象,一个是map,一个是bean,map中的key和bean中的一个属性的名称是一致的? <br/>
<s:property value="username"/>
</body >
</html>
0 0
- 【Struts2五】ValueStack以及ognl表达式一(概述)
- 【Struts2五】ValueStack以及ognl表达式二(常用标签)
- 【Struts2五】ValueStack以及ognl表达式三(iterator标签详解)
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(一)
- struts2中OGNL和 ValueStack(一)
- Struts2-Ognl表达式与ValueStack
- struts2中OGNL和 ValueStack(二)
- struts2之valueStack(OGNL) (总结)
- struts2-ValueStack相关知识(OGNL)
- Struts2 OGNL ValueStack
- Struts2-OGNL-ValueStack
- Struts2 OGNL valueStack
- OGNL表达式,值栈(ValueStack),类型转换
- OGNL表达式(StackContext ValueStack Action Context)入门----Struts2 之一
- struts2中几个核心的组件ActionContext、ValueStack、OGNL表达式
- struts2中几个核心的组件ActionContext、ValueStack、OGNL表达式
- 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack
- 编写自己的Shell解释器
- What is DMA and what does it do?
- 让mongodb的secondary支持读操作
- Android开发,你应该知道的学习资源
- Zigbee通讯之开发篇(基于TI 的Z-Stack)
- 【Struts2五】ValueStack以及ognl表达式一(概述)
- Ubuntu增加虚拟内存(swap分区)
- 【VC++游戏开发】智力游戏——鸡蛋里挑骨头(仿扫雷)
- OpenCV读取XML/YML文件的方法
- 日经社説 20150716 合意形成力の低下示した採決
- Qt浅谈之二十九Qt多线程
- iOS开发工具-网络封包分析工具Charles
- 程序员必须知道的10大基础实用算法及其讲解
- 配置虚拟机中的Linux可以通过物理机网卡上网