OGNL表达式

  OGNL对象试图导航语言。${user.addr.name}这种写法就叫对象试图导航。Struts框架使用OGNL作为默认的表达式语言

  OGNL不仅仅可以试图导航,支持比EL表达式更加丰富的功能。

  OGNL的jar包,在导入Struts包的同时,就已经包含OGNL的jar包了,直接使用即可。

  ognl从OGNLContext中取数据,OGNLContext中有两部分组成 root 和 Context

  root 放置任何对象作为root都可以,Context 必须使用Map 键值对。

OGNL基本语法

  取值

        User rootUser = new User("tom",18);
Map<String,User> context = new HashMap<String,User>();
context.put("user1",new User("jack",18));
context.put("user2",new User("rose",22)); OgnlContext oc = new OgnlContext();
oc.setRoot(rootUser);
oc.setValues(context); String name = (String)
Ognl.getValue("name",oc,oc.getRoot());
System.out.println(name); String name1 =
(String)Ognl.getValue("#user1.name",oc,oc.getRoot());
System.out.println(name1);

  赋值(输出laoshi)

        String name = (String) Ognl.getValue("name='laoshi'",oc,oc.getRoot());

  调用方法

String name = (String) Ognl.getValue("getName()",oc,oc.getRoot());

  串行执行表达式

String name = (String)Ognl.getValue("setName('luck'),getName()",oc,oc.getRoot());

  调用静态方法

Double r = (Double)Ognl.getValue("@java.lang.Math@random()",oc,oc.getRoot());

  创建对象-list

Integer size = (Integer) Ognl.getValue("{'tom','jerry','jack','rose'}.size()",oc,oc.getRoot());

  map

Integer size = (Integer) Ognl.getValue("#{'name':'tom','age':18}.size()",oc,oc.getRoot());

OGNL与
Struts2的结合

  在struts2中 valueStack值栈 就是OGNLContext 包含root(放置的是一个栈(先进后出)) 和Context(放入的是ActionContext数据中心)

  root:默认情况下栈中存放的是当前访问的Action对象,Context中就是ActionContext数据中心 那些 request、session。。。

  参数接收原理->表单页name=tom->params拦截器=>交给ognl处理=>从root中拿到name属性,并赋值为tom->然后到达Action完成参数赋值。

  

  在配置文件中使用OGNL-重定向带动态参数

    <package name="hello" namespace="/demo" extends="struts-default">
<action name="demo1" class="com.struts2.web.HelloAction" method="hello">
<result name="success" type="redirectAction">
<param name="actionName">demo2</param>
<param name="namespace">/demo</param>
<!--参数-->
<param name="name">${name}</param>
</result>
</action> <action name="demo2" class="com.struts2.web.Hello1Action" method="hello1">
<result name="success">/demo1.jsp</result>
</action>
</package>

helloAction 和hello1Action

public class HelloAction extends ActionSupport {
private String name;
public String hello(){
System.out.println(name);
return "success";
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
public class Hello1Action {
private String name;
public String hello1(){
System.out.println(name);
return "success";
} public void setName(String name) {
this.name = name;
} public String getName(){
return this.name;
}
}

提交页

  <form action="${pageContext.request.contextPath}/demo/demo1" method="post">
<input name="name" type="text">
<button type="submit">提交</button>
</form>

重定向后页

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--引入标签 -->
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
</head>
<body>
姓名:<s:property value="name" />
</body>
</html>

struts2OGNL表达式(三)的更多相关文章

  1. [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用

    [.net 面向对象程序设计进阶] (7) Lamda表达式(三) 表达式树高级应用 本节导读:讨论了表达式树的定义和解析之后,我们知道了表达式树就是并非可执行代码,而是将表达式对象化后的数据结构.是 ...

  2. struts2-OGNL表达式-OGNL与Struts2的结合

    1 OGNL表达式 OGNL:对象视图导航语言. ${user.addr.name} 这种写法就叫对象视图导航.OGNL不仅仅可以视图导航.支持比EL表达式更加丰富的功能. 1.1 使用OGNL 导包 ...

  3. Struts2---OGNL表达式和EL表达式

    在action里放入actioncontext的变量值 ActionContext.getContext().put("forumList", forumList); 在jsp里如 ...

  4. struts2 OGNL表达式

    一.OGNL OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对 ...

  5. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  6. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  7. C#基础知识总结(三)

    摘要 关系表达式.逻辑表达式.分支结构的总结:if-else.if-else if-else.switch-case一.关系运算符 >,==,<… 关系表达式的结果是bool类型,true ...

  8. Python-正则表达式总结版

    前言: 总是写不好正则表达式,时间长不用就有些忘记了,故此在总结一篇文章以便日后查阅. 一.常用的匹配规则总结表 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空 ...

  9. OGNL表达式(转载)

    OGNL表达式(转载)   1.什么是OGNL OGNL:Object Graphic Navigation Language(对象图导航语言) 它是Struts2中默认的表达式语言.使用表达式需要借 ...

随机推荐

  1. zTree 模糊搜索

    /** * 搜索树,高亮显示并展示[模糊匹配搜索条件的节点s] * @param treeId * @param searchConditionId 搜索条件Id */ function search ...

  2. discourse论坛迁移

    在源设备的操作备份数据文件tar -czvf discoursefile716.tar.gz /var/discourse然后把此discoursefile716.tar.gz文件传到需要迁移的设备上 ...

  3. 如何在Ubuntu16.04 中安装Linux, Nginx, MySQL, PHP (LEMP 栈)

    介绍 LEMP 栈是用来开发动态网页和web 应用程序的一系列软件集合,LEMP描述的是Linux操作系统,Nginx web 服务器,以及后端数据存储MySQL/MariaDB数据库和服务器端动态脚 ...

  4. python文件头的含义

    一.指定解释器及其路径 在Linux\Mac上,可以用./文件路径直接运行.py文件 这时,需要在python文件开头指定解释器及其路径 #!/usr/bin/python 这样系统就直接按pytho ...

  5. HTML5本地存储——Web SQL Database与indexedDB

    虽然在HTML5 WebStorage介绍了html5本地存储的Local Storage和Session Storage,这两个是以键值对存储的解决方案,存储少量数据结构很有用,但是对于大量结构化数 ...

  6. 【Codeforces 466C】Number of Ways

    [链接] 我是链接,点我呀:) [题意] 让你把数组分成3个连续的部分 每个部分的和要一样 问你有多少种分法 [题解] 先处理出来num[i] 表示i..n这里面有多少个j 满足aft[j] = af ...

  7. 记一次ruby的安装

    1,下载rubyinstall 安装包及devkit包 登陆网站 :http://rubyinstaller.org/downloads/ 安装rubyinstall包时添加到环境变量 2,安装完in ...

  8. Windows 10卸载Edge浏览器(不成功的别试了)

    在命令行输入: PowerShell dir $env:LOCALAPPDATA\Packages\*edge*^|ren -newname MicrosoftEdge.old ; dir $env: ...

  9. N天学习一个linux命令之df

    用途 查看系统硬盘空间使用情况 用法 df [OPTION]... [FILE]... 常用参数 -a, --all 显示所有文件系统,包含类似文件系统(dummy file system) -B, ...

  10. optimizer_index_cost_adj

    Oracle在选择不同的访问路径时,会对全表扫描和索引扫描进行比较评估. 在比较的时候,Oracle会把索引扫描的成本转换为全表扫描的成本,和全表扫描的COST进行比较.这个转换需要一个转换因子. 就 ...