struts OGNL数据标签
OGNL对象图导航语言,类似于el表达式,strut的底层就是用这个写的
在导入struts-core的时候会导入ognl.jar
public class Test {
public static void main(String[] args) throws OgnlException {
// ognl获取值
Address address = new Address();
address.setId(200);
address.setCity("北京");
User user = new User();
user.setAddress(address);
user.setId(100);
user.setName("zhangsan");
System.out.println(Ognl.getValue("address.id", user));
System.out.println(Ognl.getValue("name", user));
//对map操作
Address address = new Address();
address.setId(200);
address.setCity("北京");
User user = new User();
user.setAddress(address);
user.setId(100);
user.setName("zhangsan");
Admin admin = new Admin();
admin.setId(250);
admin.setUsername("superadmin");
admin.setPassword("44455666");
Map<String, Object> map = new HashMap<String, Object>();
map.put("u", user);
map.put("a", admin);
// (想要输出的)(上下文)(root)
System.out.println(Ognl.getValue("#root", map, user));
// 放在map中的admin中的id值
System.out.println(Ognl.getValue("id", map,admin));
// map中的u的address的city值
System.out.println(Ognl.getValue("#u.address.city", map,map));
// 这里的#root就代表map
System.out.println(Ognl.getValue("#root.u.address.city", map,map));
<!-- 对list的操作 -->
Address address1 = new Address();
address1.setId(100);
address1.setCity("北京");
Address address2 = new Address();
address2.setId(200);
address2.setCity("南京");
Address address3 = new Address();
address3.setId(300);
address3.setCity("东京");
List<Address> list = new ArrayList<Address>();
list.add(address1);
list.add(address2);
list.add(address3);
System.out.println(list.size());
System.out.println(Ognl.getValue("#root[1].city", list));
System.out.println(Ognl.getValue("size()", list));
<!--运行这个方法,并获得返回值输出 -->
System.out.println(Ognl.getValue("hello()", address1));
}
}
valuestack
public class OgnlAction {
private String name;
private String password;
private List<Address> addressList;
public String execute() {
ActionContext actionContext = ActionContext.getContext();
name = "Rose";
password = "123123";
User user = new User();
user.setId(100);
user.setName("jack");
/*入栈,首先是把当前action的属性值放进去,然后再放入push的东西*/
actionContext.getValueStack().push(user);
<!-- 放入actionContext 跟入栈是两个不同的位置-->
actionContext.put("k1", "v1");
actionContext.put("k2", "v2");
Address address1 = new Address();
address1.setId(100);
address1.setCity("北京");
Address address2 = new Address();
address2.setId(200);
address2.setCity("南京");
Address address3 = new Address();
address3.setId(300);
address3.setCity("东京1");
Address address4 = new Address();
address4.setId(300);
address4.setCity("东京2");
addressList = new ArrayList<Address>();
addressList.add(address1);
addressList.add(address2);
addressList.add(address3);
addressList.add(address4);
return "success";
}
}
jsp中要倒入标签
<%@ taglib prefix="s" uri="/struts-tags" %>
<h3>List: <s:property value="addressList"/></h3>
<h3>List size:<s:property value="addressList.size"/> </h3>
<h3>List first: <s:property value="addressList[0]"/></h3>
<h3>city: <s:property value="addressList[0].city"/></h3>
<h3>city: <s:property value="addressList.{city}[1]"/></h3>
<h3>city: <s:property value="addressList.{?#this.id == 300}.{city}"/> </h3>
<h3>city: <s:property value="addressList.{^#this.id == 300}.{city}"/> </h3>
<h3>city: <s:property value="addressList.{$#this.id == 300}.{city}"/> </h3>
<h3>list: <s:property value="{'aa','bb','cc'}"/> </h3>
<h3>map: <s:property value="#{'k1':'v1','k2':'v2' }"/></h3>
<h3></h3> <hr/>
<!-- 首先是把当前action的属性值放进去,然后再放入push的东西 ,所以出栈的时候
user是首先出来的,是root[0],然后root[1]指的是action的属性值-->
<h3>name5: <s:property value="#root[1].name"/></h3>
<h3>password: <s:property value="password"/> </h3>
<h3>k1: <s:property value="#request.k1"/> </h3>
<h3>k2: <s:property value="k2"/></h3>
<h3>user id : <s:property value="id"/></h3>
struts OGNL数据标签的更多相关文章
- struts2学习(8)struts标签1(数据标签、控制标签)
一.struts2标签简介: struts标签很多,功能强大,这是优点: 但是缺点的话,性能方面可能会,各方面速度啊啥的会降低:有人比较测试,struts性能比jstl低很多: 二.struts2 ...
- Struts2入门(五)——OGNL和标签库
一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...
- Struts2的标签库(四)——数据标签
Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...
- struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)
课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...
- Struts2 04--- 值栈 ognl(S标签)
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...
- struts2标签库----数据标签详解
上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理.主要涉及以下数据标签: action标签:用于在视图页面跳转到一个Action ...
- Struts2之数据标签(二)
Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签能够同意在JSP页面中 ...
- struts2常用标签之数据标签
数据标签1 property标签 property标签的主要属性: value:用来获取值的OGNL表达式,如果value属性值没有指定,那么将会被设定为top,也就是返回位于值栈最顶端的对象. ...
- Struts2 数据标签
Struts 2 的数据标签主要用于操作页面上显示的数据.下面列出的是重要的数据标签: action标签: 此标记使开发人员能够直接从JSP页面调用动作指定动作的名称和一个可选的命名空间.标签的主体内 ...
随机推荐
- activity的生命周期【转】
关于activity的生命周期,越来越感觉很重要.activity的生命周期有点像asp.net中page的生命周期,经历好几个过程.重写不同的阶段,可以完成不同的功能和效果.先上一张经典的生命周期图 ...
- jQuery 插件 flexslider 初步使用
发现了个不错的 jQuery 幻灯片插件 flexslider,有 接近 3000 Star,应该说是很靠谱的,下面是简单使用教程. 引入代码 所有代码都可以在 flexlslider 的 Githu ...
- Hibernate 总结一
Session 当批量处理数据过大时,session这个集合会造成内存溢出,需要通过flush把session中的数据刷出到数据库中,让后再clear,清空缓存 一.集合映射. 类型 Java中声明 ...
- HDU1712-ACboy needs your help
描述: ACboy has N courses this term, and he plans to spend at most M days on study.Of course,the profi ...
- web乱码问题
String data = "不见青山"; ServletOutputStream sos = response.getOutputStream(); byte b[] = dat ...
- ORA-20000: ORU-10027: buffer overflow, limit of 10000 bytes
要用dbms_output.put_line来输出语句,遇到以下错误: ERROR 位于第 1 行: ORA-20000: ORU-10027: buffer overflow, limit ...
- tomcat应用转到weblogic上时的问题
昨天将一个tomcat环境下调试通过的报表demo应用发布到weblogic上做测试,结果发现好多问题.总结了一下,主要有这么几点: 1.使用log4j的问题. tomcat应用直接发布到weblog ...
- 捕捉小括号获取的内容保存在RegExp的$1 $2..属性中
~~~~捕捉小括号获取的内容保存在RegExp的$1 $2..属性中 var reg=/^(-?\d+)(px|pt|em|in)?$/;if(reg.test(svalue)){ ...
- BZOJ 1002 轮状病毒 (基尔霍夫矩阵)
题解:http://vfleaking.blog.163.com/blog/static/17480763420119685112649/ #include <iostream> #inc ...
- Eclipse创建新项目时无法输入项目名的解决方法
放假耍了那么久,也是该收心忙活了. 今天打开Eclipse新建项目时,发生了一个很奇怪的情况,就是在下面这个位置的输入框无法输入. 经过百度之后,发现解决方案是(原地址点我) Eclipse图标右键 ...