创建User封装数据类
public class User {
private String username;
private String password;
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
创建ValueStackActiono逻辑操作类
import cn.web.body.User;
import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.List;
public class ValueStackActiono extends ActionSupport {
private List<User> list=new ArrayList<>();
public List<User> getList() {
return list;
}
@Override
public String execute(){
User user=new User();
user.setUsername("k1");
user.setPassword("hao");
list.add(user);
User user1 = new User();
user1.setUsername("k2");
user1.setPassword("zms");
list.add(user1);
return "success";
}
}
配置Struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="myk" extends="struts-default" namespace="/">
<action name="valueAction" class="cn.web.action.ValueStackActiono">
<result name="success">/WebContent/ValueStack.jsp</result>
</action>
</package>
</struts>
第一种方式:创建如下jsp文件,核心代码如下
<s:property value="list[0].username"/>
<s:property value="list[0].password"/>
<br>
<s:property value="list[1].username"/>
<s:property value="list[1].password"/>
第二种方式:同上
<s:iterator value="list">
<s:property value="username"/>
<s:property value="password"/>
</s:iterator>
流程:通过迭代器遍历的方式,遍历list集合中的每一个User对象,然后进行输出
第三种方式:同上
<s:iterator value="list" var="user">
<s:property value="#user.username"/>
<s:property value="#user.password"/>
</s:iterator>
流程:该方式最为常用,遍历值栈list集合,得到每个User对象机制,把每次遍历出来的User对象放到context里面。
获取context里面数据的特点:写ognl表达式,使用特殊符#(root和context两种数据存放方式,该方式存在context提高了取数据得效率,减少了从root的压力 ----- nice兄dei)
我们都知道context里面是以Map集合形式存在的(详见我的博客),该方式会在context里面分配一个key-value的形式的空间,其中的key值就是代码中的var属性值,value就不必多说了。