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页面调用动作指定动作的名称和一个可选的命名空间.标签的主体内 ...
随机推荐
- 用上Google才是正事 分享几个訪问Google的IP和域名
通过VPN或者GAE等代理进行訪问,GAE下载请移步<GAE 3.1.18 最新版本号下载 用上Google才是正事>.这是大家通经常使用的办法.也有同学们不愿意使用代理软件.那今天来分享 ...
- POJ 1037 DP
题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...
- 提前防止Non-PIE错误,检测app是否包含PIE标志
//Howard 2013-07-19 //如何检测app是否包含PIE标志? 答:使用xCode自带的otool工具. otool程序在Xcode.app/Contents/Developer/us ...
- /etc/ld.so.conf详解
/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径. 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装 ...
- 优化器的使用oracle ---explain plan
如果要分析某条SQL的性能问题,通常我们要先看SQL的执行计划,看看SQL的每一步执行是否存在问题. 如果一条SQL平时执行的好好的,却有一天突然性能很差,如果排除了系统资源和阻塞的原因,那么基本可以 ...
- Matlab中的静态(持久)变量和全局变量
1.静态变量(persistent) 在函数中声明的变量,当函数调用完之后就会释放.如果想保留这个变量的值(供该函数下一次调用),可以把这个变量声明为静态变量.静态变量不能在声明的时候赋值,而且只能在 ...
- 关于反射的一个小问题---.NetFrameWork版本不一样导致不同的系统的问题
背景: 近期项目中用到发射,本人的电脑上是安装了.NetFrameWork 4.5,然后用着发射蛮顺溜的,啪啪,三下五除二,项目完成了,然后提交测试了,测试的电脑是虚拟机上安装了xp系统,然后.Net ...
- ASP.NET产生随机验证码
效果图:(Flowing) 1.项目中新建用于存储(位图)图片文件夹 图解: 2.前台可以添加一ASP.NET控件或其他任意用来展示图片标签等(如下) <div> <asp:Imag ...
- 求新的集合 A=AUB(顺序表)
#include<stdio.h> typedef int A; const int LIST_INIT_SIZE=100; const int LISTINCREMENT=10; typ ...
- 使2个div 在一行上显示
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...