创建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就不必多说了。