博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ognl
阅读量:6471 次
发布时间:2019-06-23

本文共 2000 字,大约阅读时间需要 6 分钟。

一.基本简介

  1.OGNL是Object-Graph Navigation Language的,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的。

    OGNL在框架中主要做两件事情:表达式语言和类型转换器。

  2.OGNL在框架中的作用以及数据的流入流出:

 

二、ValueStack值栈

  定义:是内存中的一块空间,栈和堆之外的空间,它具有栈的特征,可以存放多个对象,如果存放多个对象,他们是按照先后顺序压入堆栈的。框架在处理每个请求时,都会创建该请求对应的运行环境,这时会创建值栈和请求对应的Action实例,并将Action实例压入值栈中  


 三、实现思路

  可通过单列(Root)、双列(Context)集合获取ValueStack

单列集合:

技术分享

  创建Action类继承自ActionSupport,首先通过ServletActionContext获取到request对象,其次创建UserInfo对象,通过ValueStack对象的getRoot方法拿到UserInfo对象info

public class ValueStackAction extends ActionSupport {    @Override    public String execute() throws Exception {        HttpServletRequest request = ServletActionContext.getRequest();        ValueStack vs = (ValueStack) request.getAttribute("struts.valueStack");        UserInfo info = new UserInfo();        info.setUsername("呵呵");        info.setPassword("12345");                    vs.getRoot().add(info);                return SUCCESS;    }

index.jsp页面进行取数据:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><%@ taglib uri="/struts-tags" prefix="s" %>          My JSP ‘index.jsp‘ starting page        valueStack      

技术分享

 


双列集合:

技术分享

 

技术分享

 技术分享

index.jsp页面:需注意的是双列集合通过#获取数据

技术分享

 技术分享

使用ognl表达式:

  1)“#”符号有三种用途

  a、访问非根对象(struts中值栈为根对象),eg:OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:

名称   作用域 

eg:

1-1)parameters :包含当前HTTP请求参数的Map

   #parameters.id[0]=>作用相当于request.getParameter("id")

 

1-2)request:包含当前HttpServletRequest的属性(attribute)的Map

   #request.userName=>作用相当于request.getAttribute("userName");

 

1-3)session:包含当前HttpSession属性(attribute)的Map

   #session.userName=>session.getAttribute("userName");

 

1-4)application:包含当前应用的ServletContext的属性(attribute)的Map

   #application.userName=>application.getAttribute("userName");

 

转载于:https://www.cnblogs.com/Zhangmin123/p/5960146.html

你可能感兴趣的文章
手动删除portal中托管服务。
查看>>
json_decode转换数组过程中,结果为null处理办法,百分之百有效
查看>>
SqlServer 中的触发器
查看>>
java面向对象(异常)
查看>>
在Leangoo里怎么找到用户中心?
查看>>
JS获取对象“属性”的方法
查看>>
团队管理中的每日站立会思考
查看>>
ascll码
查看>>
myeclipse 启动tomcat报错
查看>>
Java 日历组件java.util.Calendar以及时间戳 java.sql.Timestamp
查看>>
http header
查看>>
周进度总结
查看>>
Windows Powershell统计代码行数
查看>>
访问ORACLE数据库
查看>>
用批处理编译*.sln工程
查看>>
数组平衡点
查看>>
shake.js实现微信摇一摇功能
查看>>
纪中2018暑假培训day5提高b组改题记录
查看>>
BIOS基本知识
查看>>
导航栏的常见配置
查看>>