struts2中 ValueStack的set方法与setValue方法的区别呢?

示例代码:

  1. ActionContext.getContext().getValueStack().setValue("myname22", "ttt");
  2. 区别:

    (1)setValue 方法必须要求有该属性的setter方法,否则会报错:

    Error setting expression'myname22' with value 'ttt' - [unknown location]

    set方法设置的属性与该action没有任何关系,所以就算action中没有该属性的setter方法,调用

    1. ActionContext.getContext().getValueStack().set("myname22", "ttt");
  3. (2)setValue方法设置的是action的属性(action中有属性myname22),在value stack 中对应的是action的属性;

    而set方法设置的属性会放在一个hashmap中,与当前的action没有任何瓜葛,但是两者都在value stack中,set方法设置的属性可以通过 <s:property value="myname22"  />来取值。

    共同点:

    (1)setValue和set方法设置的属性可以通过

    1. String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22");

    来取值;

    (2)在result指向的JSP页面中都可以通过 <s:property value="myname22"  />来取值(setValue方法设置的属性必须要有对应的getter方法)。

    action代码:

    1. package example;
    2. import org.apache.struts2.ServletActionContext;
    3. import com.opensymphony.xwork2.ActionContext;
    4. import com.opensymphony.xwork2.ActionSupport;
    5. public class GetValueAction extends ActionSupport {
    6. private static final long serialVersionUID = 4865100826143278474L;
    7. private String myname=null;
    8. //  private String myname22;
    9. @Override
    10. public String execute() throws Exception {
    11. ActionContext.getContext().getValueStack().set("myname22", "ttt");
    12. String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22");
    13. //      System.out.println("myname2: "+this.myname);
    14. return super.execute();
    15. }
    16. public String getMyname() {
    17. return myname;
    18. }
    19. public void setMyname(String myname) {
    20. this.myname = myname;
    21. }
    22. //  public String getMyname22() {
    23. //      return myname22;
    24. //  }
    25. //
    26. //  public void setMyname22(String myname22) {
    27. //      System.out.println("abc:"+myname22);
    28. //      this.myname22 = myname22;
    29. //  }
    30. //  public String getMyname22() {
    31. //      return myname22;
    32. //  }
    33. }

    总结:set方法和setValue方法设置的属性都可以通过<s:property value="myname22"  />取值。

struts2 ValueStack的set方法与setValue方法的区别的更多相关文章

  1. struts2视频学习笔记 11-12(动态方法调用,接收请求参数)

    课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...

  2. struts2 type="redirectAction"重定向 与动态调用方法

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...

  3. Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法

    Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...

  4. easyui combobox setValue方法不能触发onSelect事件

    //setValue方法不能触发onSelect事件 //$("#FundingSource").combobox("setValue", data.Fundi ...

  5. Struts2 后台获取路径的几种方法

    Struts2 后台获取路径的几种方法 package actions.app; import java.io.File; import org.apache.struts2.ServletActio ...

  6. struts2.5+框架使用通配符与动态方法

    概述:struts2.5以后加强了安全性,下面就是安全配置引发的问题 通配符: 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="usercru ...

  7. Struts2动态调用DMI及错误解决方法

    在Strust2中action可以定义自己的方法,调用方法有两种方式,一种方式是struts.xml中指定method来表示需要用到的方法, 但是这种方法缺点在于如果你的Action中有很多方法则要多 ...

  8. struts2 ValueStack的作用

    Value Stack的作用: 1.       可以作为一个数据中转站 2.       用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合.我用得最多的就是数据 ...

  9. C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法

    在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...

随机推荐

  1. css控制打印时只显示指定区域

      CreateTime--2017年9月26日08:16:04 Author:Marydon css控制打印时只显示指定区域 思路: 1.使用打印命令@media print: 2.控制执行打印命令 ...

  2. ubuntu14.04下CPU的caffe配置,不成功的朋友请与我(lee)联系,后面附带邮箱

    因广大朋友需求cpu的caffe配置.所以我(lee)在这份博客中对cpu配置caffe做出对应操作说明.希望能够解决大家对cpu配置caffe的困惑.少走弯路. 假设有安装不成功的朋友能够和我联系, ...

  3. vue 生命周期钩子

    每个vue实例被创建时都会经历一系列初始化的过程,像是一个生命从无到有的过程,所以叫生命周期,而这个过程都有对应的不同阶段,也就对应了生命周期不同的钩子函数,这些生命周期函数,作为vue实例的属性使用 ...

  4. hive编程入门课程(加精)

    hive编程入门课程 http://wenku.baidu.com/link?url=BfyZWjz48G_6UJImzWw39OLB0sUrIYEYxoxNpaFbADUQekmOvQy4FPY1f ...

  5. 【TensorFlow-windows】(一)实现Softmax Regression进行手写数字识别(mnist)

    博文主要内容有: 1.softmax regression的TensorFlow实现代码(教科书级的代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3 ...

  6. a REST API

    https://spring.io/guides/tutorials/bookmarks/ http://roy.gbiv.com/untangled/2008/rest-apis-must-be-h ...

  7. 看不懂JDK8的流操作?5分钟带你入门(转)

    在JDK1.8里有两个非常高级的新操作,它们分别是:Lambda 表达式和 Stream 流. Lambda表达式 让我们先说说 Lambda 表达式吧,这个表达式最大的作用就是简化语法,让代码更加易 ...

  8. Windows踩坑笔记之使用_tWinMain报错的解决方案

    对于如下代码 #include <Windows.h> int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, ...

  9. 【NOIP 模拟赛】 道路

    题目描述在二维坐标平面里有 N 个整数点,信息班某一巨佬要访问这 N 个点.刚开始巨佬在点(0,0)处. 每一步,巨佬可以走到上.下.左.右四个点.即假设巨佬当前所在点的坐标是(x,y),那么它下一步 ...

  10. CRM 安装不规范,亲人两行泪

    安装CRM需要严格按照CRM部署文档的要求进行,比如设置CRM服务的服务账号一定要加入到CRM所在组织库用户里,不然会遇到下面错误.这个就是传递到SQL 的账号,在SQL那边不识别 <s:Env ...