struts2推荐使用ognl表达式

ognl: object graph navigation language 对象导航图语言

如:school.teacher.address="北京"

1. ognl的使用

public class OgnlTest {
public static void main(String[] args) throws OgnlException {
//ognl将数据分为两类;常用的和不常用 大的和小的
//把常用的数据放在 获取方便的地方 把不常用的数据放在获取麻烦一点的地方。
//在ognl中 把常用的数据放在 根对象(root) 不常用的数据放在context(上下文)---是一个map; Ognl.getValue("取值", map(map对象), user(根对象)),取值如果直接如”user”怎取根对象,如果“#address”取map中的对象 Map<String,Object> map = new HashMap<String,Object>();
map.put("address", "北京昌平");
map.put("user", new User("张三","1111"));
User user = new User("siggy","2222");
//ognl表达式获取根对象的数据 直接获取即可
System.out.println(Ognl.getValue("name", map, user));
//ognl表达式获取上下文对象 需要加#获取
System.out.println(Ognl.getValue("#address", map, user));
System.out.println(Ognl.getValue("#user.name", map, user)); }
}

在struts2中可以通过ognl表达式获取数据,在strut2将ActionContext对象作为ognl的上下文对象,ValueStack作为ognl的根对象。

ValueStack是一个栈接口,称为值栈。在一个请求来时会创建一个ValueStack,将Action的属性值放入值栈中。创建Action处理类后将值栈中的属性值设置到处理类中上。Action中的属性值会放入到ValueStack。在请求结束时ValueStack消亡。

2.在struts2中使用ognl表达式获取值,需要添加strut2的标签库,并且需要使用特定的标签来获取值。

导入标签库

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>

使用标签获取

   欢迎<s:property value="user.name"/>使用系统---从值栈中获取<br/>
欢迎<s:property value="#session.currentUser.name"/>使用系统---从ActionContext--session中获取<br/>
欢迎<s:property value="#attr.currentUser.name"/>使用系统---从ActionContext--attr中获取<br/>
欢迎<s:property value="#parameters['user.name']"/>使用系统---从ActionContext--parameter中获取<br/>
欢迎${sessionScope.currentUser.name }使用系统---从ActionContext中获取<br/>

非值栈方式使用

最新文章

  1. Optimistic Concurrency VS. Pessimistic Concurrency Control
  2. jQuery倒计时插件
  3. performSelector和respondsToSelector用法
  4. ECMAScript数据类型
  5. FindProcDLL::FindProc 和 KillProcDLL::KillProc,必须使用WPF x86编译出来的程序
  6. apache开源项目-- UIMA
  7. 深入分析 Java 中的中文编码问题(转)
  8. 配置CAS错误No Certificate file specified or invalid file format
  9. ECharts使用心得——矩阵树图
  10. 重启oracle数据库的一次操作命令和alter日志。
  11. springBoot系列教程03:redis的集成及使用
  12. 1.1专题介绍「深入浅出ASP.NET Core系列」
  13. FreeSwitch 终端命令详细介绍
  14. React 学习(七) ---- create-react-app
  15. 4.express 框架
  16. python中的魔法参数:*args和**kwargs
  17. xmind指定32位jdk解决在64位系统上不能启动的问题
  18. python转义符的使用
  19. 发布Maven项目 nexus
  20. python学习(十九)常见的第三方库

热门文章

  1. IDEA的foreach循环
  2. vscode快捷键,让你脱离鼠标,敲代码嗖嗖的
  3. touchz,mkdir,vi的区别
  4. debian10使用国内源安装docker以及一些使用方法
  5. tomcat启动报错java.lang.OutOfMemoryError:PermGen space解决办法
  6. html5 css3 背景视频循环播放代码
  7. python的subprocess模块介绍
  8. mysql实现oracle存储过程默认参数
  9. Oracle系列六 分组函数
  10. (转)scipy详解