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. LuCI探究(转)

    原文链接 : http://www.cnblogs.com/gnuhpc/archive/2013/08/31/3293643.html 1. 多语言 1)检查: opkg list | grep l ...

  2. 超高性价比USB转CAN适配器,2500V工业级隔离,兼容ZLG软件

    淘宝链接: http://item.taobao.com/item.htm?spm=a230r.1.14.16.QGsAZg&id=20134109594&initiative_new ...

  3. URAL 1297 Palindrome 后缀数组

    D - Palindrome Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  4. poj 2728 Desert King(最小比率生成树,迭代法)

    引用别人的解释: 题意:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一条路即可, 建造水管距离为坐标之间的欧几里德距离(好象是叫欧几里德距离吧),费用为海拔之差 现在要求 ...

  5. ios sdk的制作

    制作sdk的主要目的是将自己的code通过接口提供给其他应用使用.接下来介绍.a 静态库的制作注意事项: 1.首先.a文件的静态库要进行随时的测试,因此需要将其放入应用中(创建一个应用,再创建一个.a ...

  6. 关于一个wpf中的定时器

    http://www.cnblogs.com/royenhome/archive/2010/01/24/1655168.html

  7. centos6安装PHP5.4

    安装的命令行很简单 sudo yum --enablerepo=remi install php 不过如果你没有配置源Repository,就需要首先启动REMI源: wget http://rpms ...

  8. C# 自定义控件的一些文章和博客

    http://blog.csdn.net/songkexin/archive/2009/12/08/4961215.aspx http://www.cnblogs.com/yuanfan/archiv ...

  9. 什么是weblogic?安装步骤详解

    weblogic,就是用于java开发的web服务器. tomcat熟悉吧,跟tomcat一个作用,是比tomcat更具优势的web服务器. 安装:(转载) 1.提供安装文件网盘下载:链接处2.安装过 ...

  10. 转: vim简明教程

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...