1.从request中获取StackValue对象
String key = ServletActionContext.STRUTS_VALUESTACK_KEY;
HttpServletRequest request = ServletActionContext.getRequest();
ValueStack vs = (ValueStack)request.getAttribute(key);
1.1 向Root属性中添加无名对象
Student student = new Student("张三",18);
vs.getRoot().push(student);
1.2 向值栈中放入无名对象,实质也放在了Root属性中
Student student2 = new Student("李四",20);
vs.push(student2);
1.3 向值栈中直接放入有名对象,即map
Student student3 = new Student("王五",22);
Map<String,Student> map = new HashMap<String,Student>();
map.put("student3", student3);
vs.push(map);
1.4 向root中直接放入有名对象,即map
Student student4 = new Student("赵六",24);
vs.set("student4",student4);
1.5 将root当作ArrayList放入数据
及获取田七这个student5对象
Student student5 = new Student("田七",26);
vs.getRoot().add(student5);
//获取 4指的是在值栈中存储的下标
Student stu = (Student)vs.getRoot().get(4);
System.out.println(stu);
2.从ActionContext中获取StackValue对象
ValueStack vs2 = ActionContext.getContext().getValueStack();
2.1从ValueStack中获取其属性context
Map<String, Object> context = vs.getContext();
context.put("city","zhengzhou" );
2.2直接获取其属性context
ActionContext.getContext().put("city", "shanghai");
3.向Context中显式的放入数据
有三种方式,分别为request、session、Application.
ActionContext.getContext().put("req", "context_value");
ActionContext.getContext().getValueStack().set("req", "root_value"); //直接写在root
HttpServletRequest request2 =ServletActionContext.getRequest();
request2.setAttribute("req", "req_value");
ActionContext.getContext().getSession().put("ses","ses_value");
ActionContext.getContext().getApplication().put("app","app_value");
接收将root当作ArrayList放入的数据 :其中#request.req底层执行的是request.getAttribute("req");
#request.req被struts2包装后的查找顺序为:
1.request域空间
2.root
3.context
#req = <s:property value="#req"/><br/> <!-- #req = context_value-->
req = <s:property value="req"/><br/> <!-- req = root_value -->
#request.req = <s:property value="#request.req"/><br/> <!--#request.req = req_value -->
#ses = <s:property value="#session.ses"/><br/>
#app = <s:property value="#application.app"/><br/>
<!-- 从 page、request、session、application scopes依次查询 -->
#attr.app = <s:property value="#attr.app"/><br/>
4.向Context中隐式的放入数据
所谓隐式,就是在action类中只声明成员变量而不进行任何操作。
接收向context中隐式放入的数据
name = <s:property value="name"/><br/>
password = <s:property value="password"/><br/>
#parameters.name = <s:property value="#parameters.name"/><br/>
#parameters.password = <s:property value="#parameters.password"/><br/>
#action.name = <s:property value="#action.name"/><br/>
#action.password = <s:property value="#action.password"/><br/>
5.创建与遍历
<br/>-----------------list--------------------<br/>
<s:set name="myList" value="{'zs','ls','wu'}"/>
<s:iterator value="#myList"> <!--s:iterator 标签默认将当前的迭代对象放入到值栈栈顶-->
<s:property/><br/> <!--s:property 标签默认会输出值栈栈顶元素 -->
</s:iterator>
<br/>-----------------Map--------------------<br/>
<s:set name="myMap" value="#{'name':'wyy','age':'18'}"/>
<s:iterator value="#myMap">
<s:property/><br/>
</s:iterator>
<s:iterator value="#myMap" >
<s:property value="key"/> = <s:property value="value"/><br/>
</s:iterator>
<br/>-----------------in not in--------------------<br/>
<s:property value="'zs' in myList"/><br/>
<s:property value="'zs' not in myList"/><br/>
<br/>-----------------创建Bean--------------------<br/>
<s:bean name="com.beans.Student" id="stu">
<s:param name="name" value="'张三'"/>
<s:param name="age" value="18"/>
</s:bean>
<s:bean name="com.beans.Student" id="stu1">
<s:param name="name" value="'李四'"/>
<s:param name="age" value="20"/>
</s:bean>
<s:bean name="com.beans.Student" id="stu2">
<s:param name="name" value="'王五'"/>
<s:param name="age" value="22"/>
</s:bean>
<%-- <s:property value="#stu"/> --%>
<br/>-----------集合投影:将三个Student对象的name属性的值再组成一个List---------<br/>
<s:set name="students" value="{#stu,#stu1,#stu2 }"></s:set>
<s:set name="studentsName" value="#students.{name }"></s:set>
<s:iterator value="#studentsName">
<s:property /><br/>
</s:iterator>
<br/>-----------集合查询:查询-------------------<br/>
<s:iterator value="#students.{?#this.age >= 20}"><!-- 查询结果中的第一个用^ -->
<s:property/><br/>
</s:iterator>
<s:iterator value="#students.{^#this.age >= 20}"><!-- 查询结果中的第一个用^ -->
<s:property/><br/>
</s:iterator>
<s:iterator value="#students.{$#this.age >= 20}"><!-- 查询结果中的最后一个用$ -->
<s:property/><br/>
</s:iterator>