struts基础3-把数据写入页面

一、OGNL(Object-Groph Navigation Language)

    是一种强大的表达式语言,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。

  1)与EL表达式对比:

        OGNL对象图导航语言,比EL表达语言更强大:EL只能从域中获取数据,OGNL可以存取数据,可以调用对象的方法,获取struts的值栈的数据。

        是第三方的表达式语言(但struts中自带OGNLjar包)

  2)OGNL功能:

      1.支持运算符(+-*/)

      2.支持对象的方法调用,如xxx.doSomeSpecial();

      3.支持类静态的方法调用和值访问。

      4.支持赋值操作和表达式串联。

      5.访问OGNL上下文。

      6.操作集合对象。

      7.可以直接new一个对象。

  3)OGNL使用要素:

      1.表达式(取)

      2.根对象(存)

      3.Context对象(非根对象)(存)

  4)OGNL入门

      1.OGNL核心类:OgnlContext,本质是一个map

        1.1往根里存取数据(重要)存入的是Root去

          可以取出存的对象的字段的值

    @Test
    public void test(){
        //ognl使用
        OgnlContext ognlContext = new OgnlContext();
        //存数据  根对象
        ognlContext.setRoot("aa");
        //取数据
        Object ognlroot = Ognl.getRoot(ognlContext);
        System.out.println(ognlroot);
    }

      

  @Test
    public void test2() throws OgnlException {
        OgnlContext ognlContext = new OgnlContext();
        //存数据 根对象
        goods goods = new goods();
        goods.setName("ual");
        goods.setPrice(123.0);
        ognlContext.setRoot(goods);
        //取数据 直接取值:用Ognl.getValue(),有三个参数:1.取哪一个字段,2.ognlContext 3.root
        //获取root
        Object root = ognlContext.getRoot();
        Object name = Ognl.getValue("name", ognlContext, root);
        System.out.println(name);
    }

      1.2往非根对象中存取数据(重要)存入的是map Value区

    不可以取出存的对象的字段的值,只能取出存入的对象。

 @Test
    public void test3() throws OgnlException {
        OgnlContext ognlContext = new OgnlContext();
        //存数据,非根对象
        goods goods= new goods();
        goods.setName("ual");
        goods.setPrice(11.1);
        ognlContext.put("goods",goods);//相当于往map中存
        //非根对象无法直接取出字段,取的就是存的内容
        //获取root
        Object root = ognlContext.getRoot();
        //用Ognl.getValue(),有三个参数:1.#key,2.ognlContext 3.root
        goods obj = (goods)Ognl.getValue("#goods", ognlContext, root);//key值前要加#
        System.out.println(obj.getName());
        System.out.println(obj.getPrice());

    }

    1.3调用对象的方法

    调用静态方法要写完整名,且前面后后面加@

   @Test
    public void test4() throws OgnlException {
        OgnlContext ognlContext = new OgnlContext();
        Object root = ognlContext.getRoot();
        //调用对象的普通方法
        Object value = Ognl.getValue("‘hello‘.length()", ognlContext, root);
        System.out.println(value);
        //调用静态方法
        Object value1 = Ognl.getValue("@java.lang.Math@random()", ognlContext, root);
        System.out.println(value1);
    }

二、值栈

    1.什么是值栈

       ValueStack实际上就是一个容器,是一个接口,实现类是OgnlValueStack,当用户每次访问action对象的业务方法时,首先会创建ActionContext对象,OgnlValueStack对象(所有的数据放入其中),Action对象。OgnlValueStack对象由struts框架创建,当前端页面,如jsp发送请求时,struts默认的拦截器会将请求中的数据进行封装,并入ValueStack栈顶,struts框架中的数据就不存到域中了,而是保存到了ValueStack中。ValueStack贯穿整个action的生命周期,action一旦创建,就会创建一个ValueStack对象。

      存到域中的数据只能在页面中把它取出来,存入值栈中的数据可以在任意地方取出(如页面中,action中,配置文件中),存入域中的数据也可以从值栈中获取出来。

    2.

    2.  

原文地址:https://www.cnblogs.com/UalBlog/p/10623127.html

时间: 2024-07-31 14:44:27

struts基础3-把数据写入页面的相关文章

ASP.Net MVC开发基础学习笔记(7):数据查询页面

 前言 前面铺垫了那么多,今天我们就用MVC5 + EF6 + Bootstrap3来正式创建一个基本查询页面. 为什么从查询页面开始?嘿嘿,因为小弟的.Net生涯就是从查询页面开始的,记得正式工作的第一个月就是各种模块的查询.先做查询有什么好处?首先查询只读数据,不写数据.对数据库本身的数据安全不造成影响也不怕写入脏数据的麻烦.其次增删改查这四个操作里面,查询的难度应该是最小的,不用考虑事务流程等方面的问题. 本节最后将会生成如下页面: 创建Model 关于Model.数据库上下文.Ent

ThinkPHP3.2基础教程(20)--模型-CURD操作-数据写入

ThinkPHP的数据写入操作使用add方法,使用示例如下: $User = M("User"); // 实例化User对象 $data['name'] = 'ThinkPHP'; $data['email'] = '[email protected]'; $User->add($data); 如果是Mysql数据库的话,还可以支持在数据插入时允许更新操作: add($data='',$options=array(),$replace=false) 其中add方法增加$repla

0基础学习大数据你需要了解的学习路线和方向

现在大数据这么火,各行各业想转行大数据,那么问题来了,该往哪方面发展,哪方面最适合自己? 首先从字面来了解一下大数据 大数据 (巨量数据集合(IT行业术语)) 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 大数据的5V特点(IBM提出):Volume(大量).Velocity(高速).Variety(多样).Value(低价值密度).Veracit

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

  先看一下我要实现的功能界面:   这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数据,然后通过ajax技术向后台一般处理程序传递JSON,后台又是如何获取传来的JSON,并对JSON数据转换,然后将转换后的数据写入数据库的! 介绍这些步骤实现前,先说说自己的辛酸:絮叨辛酸,是因为为了实现这个功能,我真的用了很

将DataSet中的数据写入XML

protected void Button1_Click(object sender, EventArgs e) { string conStr = ConfigurationManager.ConnectionStrings["lianxiConnectionString"].ConnectionString; using (SqlConnection conn=new SqlConnection(conStr)) { conn.Open(); using (SqlCommand c

MVC5 + EF6 + Bootstrap3 (10) 数据查询页面

文章来源:Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-search-page.html 上一节:MVC5 + EF6 + Bootstrap3 (9) HtmlHelper用法大全(下) 源码下载:点我下载 目录 前言 创建Model 创建数据库上下文DbContext 创建初始化数据 创建Controller 创建View 查看结果页面 查看数据库 结尾 前言 前面铺垫了那么多,今天我们就用MVC5

Nopi数据写入Excel

Nopi数据写入Excel 前几天,在落伍者的现金任务无意中结识一个哥们,他有这样一个需求.因为是搞小软件销售的,所以,其在一个盘符中存储有大量数据(主要是文件夹),大概有12000多个,时间长了,他想整理一下,就是将文件夹的名称写入一个文件里,文本文件或是xls最好是xls,于是我50大元接了这个小活,全当是玩了,呵呵.通过分析需求,其获取所有的文夹名称不是难点,写入xls可以通过NOP 实现.综合,通过一个Winform程序,顺利实现.程序运行如图: 代码如下: public partial

PHP如何通过SQL语句将数据写入MySQL数据库呢?

1,php和MySQL建立连接关系 2,打开 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php <?phpmysql_connect("localhost","root","");//连接MySQLmysql_select_db("hello");//选择数据库?> 当然,前提是已经安装WEB服务器.PHP和MySQL,并且建立MySQL表“webjx” mys