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页面调用动作指定动作的名称和一个可选的命名空间.标签的主体内 ...
随机推荐
- 联想S720/S720i通刷刷机包 Vibe V1.0
ROM介绍 基于官方最新S116底包制作,保证足够的稳定性. 增加VIBE元素,看起来更加大气.美观. 首次增加VIBE元素,720i执行起来无压力,720可能会有点卡.自行酌情刷入. 有bug请文明 ...
- Objective-c 内存管理
与 C 有一点类似,oc 需要使用 alloc 方法申请内存.不同的是,c 直接调用 free 函数来释放内存,而 oc 并不直接调用 dealloc 来释放.整个 oc 都使用对象引用,而且每一 ...
- 小猪猪逆袭成博士之C++基础篇(一)数据精度、强制类型转换、变量命名规则
小猪猪逆袭成博士之C++基础篇(一) 关键词: 数据精度.强制类型转换.变量命名规则 综述: 1.大多数编程语言通过两种方式来进一步补充其特征:一是赋予程序员自定义数据类型的权利(C++中的类):二是 ...
- BZOJ 2208: [Jsoi2010]连通数( DFS )
n只有2000,直接DFS就可以过了... -------------------------------------------------------------------------- #in ...
- js表格排序 & 去除字符串空格
// a:列数 bool:排序升序判断参数 true false Str:支持多列 function newUnitSort(a, bool, str) { var oTable = document ...
- jenkins上集成fitnesse
烂笔头胜过好记性,恩,养成随手记的习惯 Fitnesse是完全有Java开发的测试框架,跨平台并且便于与其他测试框架和工具的合并(Jenkins.TestNG,Junit以及Selenium的集成) ...
- UVA 10325 lottery 容斥原理
题目链接 给出m个数, 求1-n的范围内, 无法整除这m个数之中任何一个数的数的个数. 设m个数为a[i], 对任意的i, n/a[i]是n中可以整除a[i]的数的个数, 但是这样对于有些数重复计算了 ...
- A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列
第9章 数据结构 数据结构,即可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python 有三种内建的数据结构--列表.元组和字典. list = ['item1', 'item2' ...
- Tomcat embed
http://www.iflym.com/index.php/code/use-embeded-tomcat-to-javaee-start-tomcat.html http://java.dzone ...
- Android Studio 新建项目的R文件丢失的解决方法
最近Android Studio炒的比较热,于是笔者决定赶赶时髦,从Eclipse转到了Android Studio.不幸的是,用Android Studio创建项目的时候就遇到了一个比较尖锐的问题— ...