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"  />取值。

相关文章
|
5月前
|
存储 缓存 JavaScript
Set和Map有什么区别?
Set和Map有什么区别?
426 1
|
6月前
|
存储 JavaScript 前端开发
Set中的add()方法和数组的push()方法有什么区别?
Set中的add()方法和数组的push()方法有什么区别?
388 122
|
6月前
|
存储 安全 JavaScript
如何使用Set的delete()方法删除元素?
如何使用Set的delete()方法删除元素?
523 122
|
6月前
|
存储 安全 JavaScript
如何使用Set的add()方法添加元素?
如何使用Set的add()方法添加元素?
560 58
|
5月前
|
JavaScript 前端开发
如何使用Set的delete()方法删除Set中的所有元素?
如何使用Set的delete()方法删除Set中的所有元素?
327 1
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
241 3
|
6月前
|
存储 编译器 容器
set、map、multiset、multimap的介绍及使用以及区别,注意事项
set是按照一定次序存储元素的容器,使用set的迭代器遍历set中的元素,可以得到有序序列。set当中存储元素的value都是唯一的,不可以重复,因此可以使用set进行去重。set默认是升序的,但是其内部默认不是按照大于比较,而是按照小于比较。set中的元素不能被修改,因为set在底层是用二叉搜索树来实现的,若是对二叉搜索树当中某个结点的值进行了修改,那么这棵树将不再是二叉搜索树。
251 0
|
12月前
|
Java Maven Spring
【SpringBug】lombok插件失效,但是没有报错信息,@Data不能生成get和set方法
解决写了@Data注解,但是在测试文件中生成的反编译target文件Us二Info中没有get和set方法
971 16
|
Java Windows
IDEA不使用lombok,如何快速生成get和set方法
【11月更文挑战第10天】在 IntelliJ IDEA 中生成 `get` 和 `set` 方法有多种方式:通过菜单操作、使用快捷键或自定义模板。菜单操作包括选择“Code”菜单中的“Generate...”,快捷键为“Alt + Insert”。自定义模板可在“File”-&gt;“Settings”-&gt;“Editor”-&gt;“Code Style”-&gt;“Java”中设置。批量生成时,可多选变量一次性生成。
2769 2