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页面调用动作指定动作的名称和一个可选的命名空间.标签的主体内 ...
 
随机推荐
- Java的接口及实例
			
一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为( ...
 - nodejs - json序列化&反序列化示例
			
// demo-json.js var obj = { "name": "LiLi", "age": 22, "sex" ...
 - python学习(序章)
			
好久没写过笔记了,最近听说写博客笔记能使知识记忆更深刻,于是就开始写写,不为推广,只为增加记忆.好了,开始python的学习: 学习一门语言的快慢,与人无关,主要是与学习的目的有关,python语言目 ...
 - Android 开发笔记“浅谈DDMS视图”
			
DDMS 的全称是Dalvik Debug Monitor Service,即Dalvik调试监控服务,是一个可视化的调试监控工具.它主要是对系统运行后台日志的监控,还有系统线程,模拟器状态的监控.此 ...
 - GDI+ 中发生一般性错误(在 OutputStream 中保存 PNG 格式图像时遇到的问题)
			
在将图片以 PNG 格式保存至 Response.OutputStream 时,会碰到如下错误: GDI+ 中发生一般性错误. 原因: 在写 PNG 格式的图像时,指针需要在存储的位置来回移动.而 R ...
 - 两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)
			
升级到Qt5.X之后,原先解决的Qt显示中文乱码的方法突然不适用了,找了很多方式来解决这个问题第一种:在公司代码里看到的方法,先将对应的cpp文件用windows自带的记事本打开,另存为UTF-8格式 ...
 - rpc的学习
			
rpc(Remote process call 即远程过程调用)是一种请求-相应的协议, 主要使用于C/S架构中,使得分布式系统成为可能.由客户端发起请求,服务端调用各种参数处理请求,当服务器在处理请 ...
 - ExpandableListView(二)替换箭头图标被拉伸的问题
			
之前写过一篇替换系统默认图标的文章,之后又发现了问题,当替换成自己的图片之后,图片被拉伸了!为了解决这个问题,我几乎尝试了所有方法,结果都不理想 我试过的方法,在布局里,把textview上的内容字体 ...
 - 看java源代码
			
不会看JDK源代码,相当于没学过Java. 网上不容易找到一篇帮助我解决了如何在Eclipse下查看JDK源代码 的文章. 核心提示:在Eclipse中查看JDK类库的源代码!!! 设置: 1.点 w ...
 - 高性能网站优化-创建快速响应的Web
			
<高性能网站建设进阶指南> 优化原则 优化的目的是希望降低程序的整体开销. 减少开销 通常认为开销就是程序的执行时间.而在进行优化工作时,应该把重点放在对程序开销影响最大的那部分. 假设我 ...