二十、ValueStack的常用方法

  • void set(String key,Object value):先获取根栈栈顶的Map,如果不存在,压入一个新的Map

public String execute() throws Exception {

        ValueStack vs = ActionContext.getContext().getValueStack();

        vs.set("p1", "pp1");

        vs.set("p2", "pp2");

        vs.push(new Date());//把一个对象压入栈顶

        vs.set("p3", "pp3");

        return
SUCCESS;

    }

 

  • void setValue(String ,Object):String是一个OGNL表达式。如果表达式以#开头,操作contextMap。

    如果不是,设置根栈中对象的某个属性,从顶到尾依次搜寻。

public String execute() throws Exception {

        ValueStack vs = ActionContext.getContext().getValueStack();

        vs.push(new Date());

        // 把一个对象压入栈顶

        vs.push(new Date());

        // 从栈顶搜索对象的属性,并设置month的值

        vs.setValue("[1].month", 10);

        vs.setValue("#month", 10);

 

        // 从栈顶开始搜索所有对象的shit属性:setShit,都没有报错

        vs.setValue("shit", "hehe");

 

        return
SUCCESS;

    }

 

  • Object findValue(String expr):参数是一个OGNL表达式。如果以#开头,

    从contextMap中找key值所对应的对象。如果不是以#开头,搜索根栈中对象的属性(getter方法)

特别注意:如果编写的表达式不是以#开头,先搜索根栈对象的所有属性,

如果没有找到,会把它当做key值到contextMap中找。

public String execute() throws Exception {

        ValueStack vs = ActionContext.getContext().getValueStack();

        vs.push(new Date());

        // 把一个对象压入栈顶

        vs.push(new Date());

        // 从栈顶搜索对象的属性,并设置month的值

        vs.setValue("[1].month", 10);

        vs.setValue("#month", 10);

 

        // 从栈顶开始搜索所有对象的shit属性:setShit,都没有报错

        //vs.setValue("shit", "hehe");

 

        return
SUCCESS;

    }

 

Jsp页面代码:

<%

        ValueStack vs = ActionContext.getContext().getValueStack();

        Object obj1 = vs.findValue("month");

        System.out.println(obj1);

        //打印第二个对象的month属性

        obj1 = vs.findValue("[1].month");

        System.out.println(obj1);

        obj1 = vs.findValue("request");//不建议

        System.out.println(obj1);

        obj1 = vs.findValue("#request");

        System.out.println(obj1);

    %>

 

  • String findString(String expr):把OGNL表达式获取的对象转换成String

public String execute() throws Exception {

        ValueStack vs = ActionContext.getContext().getValueStack();

        vs.setValue("#now", new Date());

        String s1 = vs.findString("#now");// 有没有错

        // 没有错的,显示的时候,Struts2框架还有个类型转换器的存在。已经把Date类型转换成了String

        System.out.println(s1);

        

        vs.setValue("#p1", "new Person()");

        //此版本会自动调用toString方法

        String s2 = vs.findString("#p1");

        System.out.println(s2);

 

        return
SUCCESS;

    }

 

二十、ValueStack的常用方法的更多相关文章

  1. JAVA基础知识总结:一到二十二全部总结

    >一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...

  2. WCF学习之旅—第三个示例之三(二十九)

    上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) 在上一篇文章中我们创建了实体对象与接口协定,在这一篇文章中我们来学习如何创建WCF的服务端代码.具体步骤见下面. ...

  3. WCF学习之旅—TcpTrace工具(二十六)

    止文(WCF学习之旅—TcpTrace工具(二十五))介绍了关于TcpTrance的一种使用方式,接下来介绍第二种使用方式. 三.通过ListenUri实现基于tcpTracer的消息路由 对于路由的 ...

  4. WCF学习之旅—实现支持REST客户端应用(二十四)

    WCF学习之旅—实现REST服务(二十二) WCF学习之旅—实现支持REST服务端应用(二十三) 在上二篇文章中简单介绍了一下RestFul与WCF支持RestFul所提供的方法,及创建一个支持RES ...

  5. geotrellis使用(二十五)将Geotrellis移植到spark2.0

    目录 前言 升级spark到2.0 将geotrellis最新版部署到spark2.0(CDH) 总结 一.前言        事情总是变化这么快,前面刚写了一篇博客介绍如何将geotrellis移植 ...

  6. geotrellis使用(二十二)实时获取点状目标对应的栅格数据值

    目录 前言 实现方法 总结 一.前言        其实这个功能之前已经实现,今天将其采用1.0版的方式进行了重构与完善,现将该内容进行总结.        其实这个功能很常见,比如google地球上 ...

  7. 无废话ExtJs 入门教程二十[数据交互:AJAX]

    无废话ExtJs 入门教程二十[数据交互:AJAX] extjs技术交流,欢迎加群(521711109) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C ...

  8. 二十五、JDK1.5新特性---枚举

    与上篇文章介绍的相同,本文也是介绍jdk 1.5出现的新特性,本文将介绍枚举的相关用法. 在jdk 1.5 之前.Java可以有两种方式定义新类型:类和接口.对于大部分面向对象来说.这两种方法看起来似 ...

  9. [分享] IT天空的二十二条军规

    Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...

随机推荐

  1. Spring中bean的配置

    先从IOC说起,这个概念其实是从我们平常new一个对象的对立面来说的,我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经 ...

  2. 如何刪除GitHub中的repository

    如何刪除一github中的repository,這本該是個非常簡單的操作,可一開始搜的時候,有不少文章比較含糊.這裡就記錄下來吧. 1.訪問https://github.com/settings/pr ...

  3. SAR命令

    前面已经介绍了 vmstat和top命令的解析及使用,下面我们来学习一个更重要的命令sarsar命令可以通过参数单独查看系统某个局部的使用情况 sar 命令行的常用格式: sar [options] ...

  4. 在VMware虚拟机中配置DOS汇编开发环境!!

    操作系统:win7 32位 DOS环境:DosBox  下载:http://www.dosbox.com/ 选择当前适合自己版本,下载就可以了. 汇编编译器:MASM 5.0 下载:http://do ...

  5. Java:过去、未来的互联网编程之王

    Java对你而言是什么?一门你大学里学过的语言?一个IT行业的通用语言?你相信Java已经为下一次互联网爆炸做好了准备么?Java 一方面为嵌入式计算做了增强,而另一方面为实时应用做了精简,本文将介绍 ...

  6. 改变select组件的option选中状态的快捷方法

    以前我都是在<option>标签处通过判断value是否与其中一个相同然后输出selected="selected"来处理的,今天发现可以直接能过Js改变<sel ...

  7. RSpec自定义matcher

    链接 https://relishapp.com/rspec/rspec-expectations/v/3-4/docs/custom-matchers/define-a-custom-matcher ...

  8. vb中&和+的区别

    在字符串连接时+号只能是两个字符串线连接&号可以是字符串与另一种类型的数据相连接.例如"a"+"b"是合法的,而 "a"+2是错误的 ...

  9. 老师你好。使用cordova生成的hellowold 的安卓5.0版本太高。怎么才可以生成4.4的呢?

    你好 在你的应用目录,有个config.xml文件,课程没有介绍每个配置项.你可以增加一项 preference name="android-targetSdkVersion" v ...

  10. 解决oralce 11g dg搭建报错:ORA-16664、ORA-16714、ORA-16810问题--转

    下面不是小编错误报告只是转了网络一篇,同时也解决了我的问题所以复制过来给各位参考. 最近在弄11g的dg时,遇到如下问题,记录下.首先在主上查看报如下错误: DGMGRL> show confi ...