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数据标签的更多相关文章

  1. struts2学习(8)struts标签1(数据标签、控制标签)

    一.struts2标签简介: struts标签很多,功能强大,这是优点: 但是缺点的话,性能方面可能会,各方面速度啊啥的会降低:有人比较测试,struts性能比jstl低很多:   二.struts2 ...

  2. Struts2入门(五)——OGNL和标签库

    一.前言 OGNL和标签库的作用,粗暴一点说,就是减少在JSP页面中出现java代码,利于维护. 1.1.OGNL 1.1.1.什么是OGNL? OGNL(Object-Graph Navigatio ...

  3. Struts2的标签库(四)——数据标签

    Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来 ...

  4. struts2视频学习笔记 29-30(Struts 2常用标签,防止表单重复提交)

    课时28 Struts 2常用标签解说 property标签 property标签用于输出指定值: <s:set name="name" value="'kk'&q ...

  5. Struts2 04--- 值栈 ognl(S标签)

           OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整 ...

  6. struts2标签库----数据标签详解

    上篇文章我们介绍struts2标签库中的控制标签的基本使用和部分原理,本篇文章接着了解下标签库中有关数据标签的使用和原理.主要涉及以下数据标签: action标签:用于在视图页面跳转到一个Action ...

  7. Struts2之数据标签(二)

    Struts2之数据标签(一):http://blog.csdn.net/u012561176/article/details/46848817 1.action标签:使用此标签能够同意在JSP页面中 ...

  8. struts2常用标签之数据标签

    数据标签1  property标签  property标签的主要属性:  value:用来获取值的OGNL表达式,如果value属性值没有指定,那么将会被设定为top,也就是返回位于值栈最顶端的对象. ...

  9. Struts2 数据标签

    Struts 2 的数据标签主要用于操作页面上显示的数据.下面列出的是重要的数据标签: action标签: 此标记使开发人员能够直接从JSP页面调用动作指定动作的名称和一个可选的命名空间.标签的主体内 ...

随机推荐

  1. 联想S720/S720i通刷刷机包 Vibe V1.0

    ROM介绍 基于官方最新S116底包制作,保证足够的稳定性. 增加VIBE元素,看起来更加大气.美观. 首次增加VIBE元素,720i执行起来无压力,720可能会有点卡.自行酌情刷入. 有bug请文明 ...

  2. Objective-c 内存管理

    与 C 有一点类似,oc  需要使用 alloc 方法申请内存.不同的是,c 直接调用 free 函数来释放内存,而 oc 并不直接调用 dealloc 来释放.整个  oc 都使用对象引用,而且每一 ...

  3. 小猪猪逆袭成博士之C++基础篇(一)数据精度、强制类型转换、变量命名规则

    小猪猪逆袭成博士之C++基础篇(一) 关键词: 数据精度.强制类型转换.变量命名规则 综述: 1.大多数编程语言通过两种方式来进一步补充其特征:一是赋予程序员自定义数据类型的权利(C++中的类):二是 ...

  4. BZOJ 2208: [Jsoi2010]连通数( DFS )

    n只有2000,直接DFS就可以过了... -------------------------------------------------------------------------- #in ...

  5. js表格排序 & 去除字符串空格

    // a:列数 bool:排序升序判断参数 true false Str:支持多列 function newUnitSort(a, bool, str) { var oTable = document ...

  6. jenkins上集成fitnesse

    烂笔头胜过好记性,恩,养成随手记的习惯 Fitnesse是完全有Java开发的测试框架,跨平台并且便于与其他测试框架和工具的合并(Jenkins.TestNG,Junit以及Selenium的集成) ...

  7. UVA 10325 lottery 容斥原理

    题目链接 给出m个数, 求1-n的范围内, 无法整除这m个数之中任何一个数的数的个数. 设m个数为a[i], 对任意的i, n/a[i]是n中可以整除a[i]的数的个数, 但是这样对于有些数重复计算了 ...

  8. A Byte of Python 笔记(7)数据结构:列表、元组、字典,序列

    第9章 数据结构 数据结构,即可以处理一些数据的结构.或者说,它们是用来存储一组相关数据的. python 有三种内建的数据结构--列表.元组和字典. list = ['item1', 'item2' ...

  9. Tomcat embed

    http://www.iflym.com/index.php/code/use-embeded-tomcat-to-javaee-start-tomcat.html http://java.dzone ...

  10. Android Studio 新建项目的R文件丢失的解决方法

    最近Android Studio炒的比较热,于是笔者决定赶赶时髦,从Eclipse转到了Android Studio.不幸的是,用Android Studio创建项目的时候就遇到了一个比较尖锐的问题— ...