struts2 ValueStack的set方法与setValue方法的区别
struts2中 ValueStack的set方法与setValue方法的区别呢?
示例代码:
- ActionContext.getContext().getValueStack().setValue("myname22", "ttt");
区别:
(1)setValue 方法必须要求有该属性的setter方法,否则会报错:
Error setting expression'myname22' with value 'ttt' - [unknown location]
set方法设置的属性与该action没有任何关系,所以就算action中没有该属性的setter方法,调用
- ActionContext.getContext().getValueStack().set("myname22", "ttt");
(2)setValue方法设置的是action的属性(action中有属性myname22),在value stack 中对应的是action的属性;
而set方法设置的属性会放在一个hashmap中,与当前的action没有任何瓜葛,但是两者都在value stack中,set方法设置的属性可以通过 <s:property value="myname22" />来取值。
共同点:
(1)setValue和set方法设置的属性可以通过
- String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22");
来取值;
(2)在result指向的JSP页面中都可以通过 <s:property value="myname22" />来取值(setValue方法设置的属性必须要有对应的getter方法)。
action代码:
- package example;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class GetValueAction extends ActionSupport {
- private static final long serialVersionUID = 4865100826143278474L;
- private String myname=null;
- // private String myname22;
- @Override
- public String execute() throws Exception {
- ActionContext.getContext().getValueStack().set("myname22", "ttt");
- String myname2=(String)ServletActionContext.getContext().getValueStack().findValue("myname22");
- // System.out.println("myname2: "+this.myname);
- return super.execute();
- }
- public String getMyname() {
- return myname;
- }
- public void setMyname(String myname) {
- this.myname = myname;
- }
- // public String getMyname22() {
- // return myname22;
- // }
- //
- // public void setMyname22(String myname22) {
- // System.out.println("abc:"+myname22);
- // this.myname22 = myname22;
- // }
- // public String getMyname22() {
- // return myname22;
- // }
- }
总结:set方法和setValue方法设置的属性都可以通过<s:property value="myname22" />取值。
struts2 ValueStack的set方法与setValue方法的区别的更多相关文章
- struts2视频学习笔记 11-12(动态方法调用,接收请求参数)
课时11 动态方法调用 如果Action中存在多个方法时,可以使用!+方法名调用指定方法.(不推荐使用) public String execute(){ setMsg("execute&q ...
- struts2 type="redirectAction"重定向 与动态调用方法
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-/ ...
- Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法
Unable to find ‘struts.multipart.saveDir’ Struts2上传文件错误的解决方法 在使用struts2的项目中上传文件的时候出现了一个这样的错误: 2011-7 ...
- easyui combobox setValue方法不能触发onSelect事件
//setValue方法不能触发onSelect事件 //$("#FundingSource").combobox("setValue", data.Fundi ...
- Struts2 后台获取路径的几种方法
Struts2 后台获取路径的几种方法 package actions.app; import java.io.File; import org.apache.struts2.ServletActio ...
- struts2.5+框架使用通配符与动态方法
概述:struts2.5以后加强了安全性,下面就是安全配置引发的问题 通配符: 在学习struts框架时经常会使用到通配符调用方法,如下: <package name="usercru ...
- Struts2动态调用DMI及错误解决方法
在Strust2中action可以定义自己的方法,调用方法有两种方式,一种方式是struts.xml中指定method来表示需要用到的方法, 但是这种方法缺点在于如果你的Action中有很多方法则要多 ...
- struts2 ValueStack的作用
Value Stack的作用: 1. 可以作为一个数据中转站 2. 用于在前台-后台之间传递数据,最典型的做法就是struts2标签也ognl表达式的结合.我用得最多的就是数据 ...
- C# IComparable接口、IComparer接口和CompareTo(Object x)方法、Compare()方法
在项目中经常会用到字符串比较,但是有时候对字符串的操作比较多,规则各异.比如有的地方我们需要用排序规则,有的地方需要忽略大小写,我们该如何写一个比较容易操作的比较方法呢?重新实现IComparer接口 ...
随机推荐
- react 通过 classnames 处理 多个class 的问题
react原生动态添加多个className会报错: import style from './style.css' <div className={style.class1 style.cla ...
- 面试之SQL(1)--选出选课数量>=2的学号
ID Course 1 AA 1 BB 2 AA 2 BB 2 CC 3 AA 3 BB 3 CC 3 DD 4 AA NULL NULL 选出选课数量>=2的学号 select di ...
- C++学习总结1
一.内存管理 一般new 与 delete 同时出现.假如释放一个对象用 delete p即可.多个对象用delet [ ]p 即:new与delete需要搭配好. C++继承了C的许多函数,mal ...
- iframe截取站点的部分内容
<div style="width:630px;height:350px;overflow:hidden;border:0px"> & ...
- python--面向对象封装
from collectoins import namedtuple Point=namedtuple('point',['x','y']) t1=Point(1,2) print(t1.x) pri ...
- Sass编译css/Grunt压缩文件
Sass安装(mac) $ sudo gem install sass scss编译成css文件 $ sass ui.scss ui.css CLI安装 $ npm install -g grunt- ...
- MAC如何查看某个端口的占用情况
执行如下命令: lsof -i tcp:8080 #8080为查询的端口号 会展示该端口的使用情况,然后kill -9 PID的值即可关闭该端口
- C++代码书写模板 -- 如何判断函数类型
先说一个简单的方案. 经过验证 g++ 和 vs2010 都可以.原理就是利用函数类型可以直接转换成函数指针. template<class T> bool test( T * t ) { ...
- 如果在 Code First 模式下使用,则使用 T4 模板为 Database First 和 Model First
web.config里的链接字符串最好和app.config里相同,因为ef的链接字符串需要一些特殊的参数
- ckeditor html标签的class 等attribute属性都被屏蔽啦,替换成空的解决方案
ckeditor 模块中自定义class 在ckeditor模块中,编辑内容时, 在源码中填写<div class="myclass">some content< ...