今天学了struts2的值栈概念 是struts2的一种存储机制,类似于域对象 值栈:可以存值 也可以取值.
导入struts2的标签库 <%@ taglib prefix="s" uri="/struts-tags" %>
在这里简单的介绍一下 关于它取值的一些区别:
package com.zking.action;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.util.ValueStack;
import com.zking.entity.person;
public class TestAction {
/**
* person对象
*/
private person person;
public person getPerson() {
return person;
}
/**
* person的list集合
*/
private List<person> lp;
public List<person> getLp() {
return lp;
}
/**
* 变量a
*/
private int a;
/**
* 变量b
*/
private int b;
/**
* 为a b设置get封装
* @return
*/
public int getA() {
return a;
}
public int getB() {
return b;
}
/**
* 默认的执行方法
* @return
*/
public String execute() {
//#表示不在struts堆栈里,没有#表示从struts堆栈里取
//值桟对象在ActionContext类中生成
ActionContext actionContext=ActionContext.getContext();
ValueStack vs=actionContext.getValueStack();
vs.set("test", "张张");
vs.set("test1", "张1");
vs.push("李四");
//vs 每访问一次action都会创建一个新的action对象 set和push的存值方法
System.out.println(vs);
person=new person();
person.setUname("李妈");
person.setSex("男");
// 1.#通常强调从上下文取 域对象存储在context里 放入域对象使用 setAttribute(key, value)
HttpServletRequest sActionContext=ServletActionContext.getRequest();
sActionContext.setAttribute("request", "request域对象里的值");
// 获取 :<s:property value="#域对象名.key名"/>
// 2.%{}强调的是从你设定的root点取 root结果是list集合
// %{}常用于计算表达式
lp=new ArrayList<>();
lp.add(new person("制作儿童", "女"));
lp.add(new person("TF", "男"));
//如%{1+99}结果将输出100
// 3.在域对象中使用%{#} 获取域对象中存储在root的值
// 比如%{#session.person.uname}
// 将获得person对象的 uname属性值
// %{#}仍然用于计算表达式,只不过操作元可以是变量
a=10;b=10;
sActionContext.setAttribute("a", a);
sActionContext.setAttribute("b", b);
return "success";
}
}
运行的结果: