struts2 ValueStack的set方法与setValue方法的区别

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

示例代码:

Java代码  

  1. ActionContext.getContext().getValueStack().setValue("myname22", "ttt");  

 区别:

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

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

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

Java代码  

  1. 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方法设置的属性可以通过

 

 

Java代码  

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

 

 

来取值;

 

 

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

 

action代码:

Java代码  

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

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

时间: 2024-12-30 15:26:00

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

这个通用操作类相当于JSP页面从struts2里action里找到相应的方法吗

问题描述 这个通用操作类相当于JSP页面从struts2里action里找到相应的方法吗 //增删改查通用操作类 PageHelper = { Entity: function () { }, getInstance: function () { return new this.Entity(); } }; PageHelper.Entity.prototype = { ContentContainer: null, CheckBoxAll: null, FlipParams: { "condi

Struts2 的问题 异步请求访问Action方法出现bug

问题描述 Struts2 的问题 异步请求访问Action方法出现bugpublic class EnumConstAction extends BaseAction {EnumConstService enumConstService;WEnumConstTab selInfo;// 专门为初始化select 使用public WEnumConstTab getInfo() {return info;}public void setInfo(WEnumConstTab info) {this.

struts2+jsp实现文件上传的方法_JSP编程

本文实例讲述了struts2+jsp实现文件上传的方法.分享给大家供大家参考.具体如下: 1. java代码: package com.wang.test; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport; public cla

hibernate数据库查询 除了fingALL()方法以外 其他方法都出现报错

问题描述 使用hibernate数据库查询除了fingALL()方法以外其他方法都出现以下报错很纠结啊以前不会啊Theserverencounteredaninternalerror()thatpreventeditfromfulfillingthisrequest.exceptionjava.lang.reflect.InvocationTargetExceptionsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)sun.re

JAVA学习(七):方法重载与方法重写、this关键字和super关键字

方法重载与方法重写.this关键字和super关键字 1.方法重载 重载能够使具有相同名称但不同数目和类型参数的类传递给方法. 注: 一是重载方法的参数列表必须与被重载的方法不同,并且这种不同必须足以清楚地确定要调用哪一个方法: 二是重载方法的返回值类型可以与被重载的方法相同,也可以不同,但是只有返回值类型不同不能表示为重载. 例如,最常用的println()方法在JDK的java.io.PrintStream中定义了十几种形式的重载,常用格式如下: public void println(in

Java语言入门教程(十四):Java语言中方法重载与方法覆盖

很多时候,某个Java类中有多个类似的方法.如Math类中,计算绝对值的方 法就会有多个,因为对不同数据类型的数计算方式不同.比如对float,int, long,double各类型的计算方式各不相同,那么Math类中就应该设计4个求绝对 值的方法,分别对每种类型进行计算.在这种情况下,最好的方式就是设计4个 同名,但是不同参的方法,如下所示(请参见API帮助文档): abs(double a) Returns the absolute value of a double value. abs(

js confirm()方法的使用方法实例

今天学习了js 中confirm的使用方法,confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框.   如果用户点击确定按钮,则 confirm() 返回 true.如果点击取消按钮,则 confirm() 返回 false. 在用户点击确定按钮或取消按钮把对话框关闭之前,它将阻止用户对浏览器的所有输入.在调用 confirm() 时,将暂停对 JavaScript 代码的执行,在用户作出响应之前,不会执行下一条语句. 下面我们通过这两个小例子,来了解一下它的使用方法吧:

Win7系统复选框使用方法及打开方法

  Win7系统复选框使用方法及打开方法         复选框使用方法及打开方法: 1.打开计算机,点击"工具"-"文件夹选项"; 2.在"文件夹选项"界面点击"查看"选卡; 3.在下面勾选[使用复选框以选择项],然后点击应用并确定; 4.然后我们就可以直接使用鼠标勾选需要选择的文件了.如图:

Array栈方法和队列方法的特点说明

 本篇文章主要是对Array栈方法与队列方法的特点进行了详细的说明介绍,需要的朋友可以过来参考下,希望对大家有所帮助 栈方法:后进先出(last in first outside)   队列方法:先进先出(first in first outside)   具体应用如下:    代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1