//Userbean代码
1
package com.test.web.bean; 2 3 public class User implements Comparable<User> { 4 private Integer id; 5 private String name; 6 public Integer getId() { 7 return id; 8 } 9 public void setId(Integer id) { 10 this.id = id; 11 } 12 public String getName() { 13 return name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 19 public String sayHello(){ 20 System.out.println("hello"); 21 return "hello"; 22 } 23 @Override 24 public int compareTo(User o) { 25 return this.id - o.getId(); 26 } 27 }

 


//action代码
1
package com.test.web.action; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5 import java.util.Collections; 6 import java.util.Comparator; 7 import java.util.HashMap; 8 import java.util.HashSet; 9 import java.util.List; 10 import java.util.Map; 11 import java.util.Set; 12 13 import org.struts2.action.utils.BaseAction; 14 15 import sun.util.locale.StringTokenIterator; 16 17 import com.opensymphony.xwork2.ActionContext; 18 import com.opensymphony.xwork2.util.CompoundRoot; 19 import com.opensymphony.xwork2.util.ValueStack; 20 import com.test.web.bean.User; 21 22 public class TagAction extends BaseAction { 23 private static final long serialVersionUID = -83430767514766103L; 24 private User[] userArray = new User[5]; 25 private List<User> userList = new ArrayList<>(); 26 private Set<User> userSet = new HashSet<>(); 27 private Map<String, User> userMap = new HashMap<>(); 28 29 public User[] getUserArray() { 30 return userArray; 31 } 32 33 public void setUserArray(User[] userArray) { 34 this.userArray = userArray; 35 } 36 37 public List<User> getUserList() { 38 return userList; 39 } 40 41 public void setUserList(List<User> userList) { 42 this.userList = userList; 43 } 44 45 public Set<User> getUserSet() { 46 return userSet; 47 } 48 49 public void setUserSet(Set<User> userSet) { 50 this.userSet = userSet; 51 } 52 53 public Map<String, User> getUserMap() { 54 return userMap; 55 } 56 57 public void setUserMap(Map<String, User> userMap) { 58 this.userMap = userMap; 59 } 60 61 public String getHello() { 62 return "hello"; 63 } 64 65 @Override 66 public String execute() throws Exception { 67 Map<String, Object> contextMap = ActionContext.getContext() 68 .getContextMap(); 69 ValueStack valueStack = ActionContext.getContext().getValueStack(); 70 71 System.out.println(valueStack); 72 Map<String, Object> context = valueStack.getContext(); 73 74 CompoundRoot root = valueStack.getRoot(); 75 System.out.println(root); 76 77 System.out.println(contextMap.getClass()); 78 System.out.println(context.getClass()); 79 80 Collections.sort(userList); 81 82 for (int i = 0; i < 5; i++) { 83 User u = new User(); 84 u.setId(i + 1); 85 u.setName("name" + (i + 1)); 86 87 userArray[i] = u; 88 userList.add(u); 89 userSet.add(u); 90 userMap.put("name" + (i + 1), u); 91 } 92 return SUCCESS; 93 } 94 }

 


//jsp页面代码
<%@ page pageEncoding="UTF-8"%> <!-- 第一步:引入struts2的标签库 --> <%@ taglib uri="/struts-tags" prefix="s"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>struts2</title> </head> <body> <!-- 逻辑控制标签 --> <!-- test属性必须是一个布尔表达式(Ognl) --> <!-- if标签 --> <!-- <s:if test="1 < 0"> --> <!-- <h1>1 < 0</h1> --> <!-- </s:if> --> <!-- elseif 标签 --> <!-- <s:elseif test="1 > 0"> --> <!-- <h1>1 > 0</h1> --> <!-- </s:elseif> --> <!-- else标签 --> <!-- <s:else> --> <!-- <h1>1 = 0</h1> --> <!-- </s:else> --> <!-- iterator-迭代标签 --> <!-- 迭代数组 var-迭代的当前集合(或数组)元素的变量名 ,存入Stack Context中 value-跌的集合(或数组) begin-迭代集合(或数组)的开始索引,该值必须大于等于0,可以比end大,但没有结果,最好小于等于end end-迭代集合(或数组)的结束索引,值不能大于集合长度 step-迭代步长(就是每次递增多少,默认1) status-当前迭代集合(或数组)元素的状态 count:当前迭代元素的编号 index:当前迭代元素的索引 first:当前迭代元素是否是第一个 last:当前迭代元素是否是最后一个 --> <!-- <s:iterator var="u" value="userArray" begin="0" end="4" step="2" status="st"> --> <!-- <p> --> <!-- <s:property value="#u.name" /> --> <!-- <s:property value="#st.count" /> --> <!-- </p> --> <!-- </s:iterator> --> <!-- <c:forEach items="${userArray }" varStatus="s"> --> <!-- <p> --> <!-- <h1>${s.current.name }</h1> --> <!-- </p> --> <!-- </c:forEach> --> <!-- <table border="1"> --> <!-- <tr> --> <!-- <th>编号</th> --> <!-- <th>索引</th> --> <!-- <th>是否为第一个</th> --> <!-- <th>是否为最后一个</th> --> <!-- <th>是否为奇数个元素</th> --> <!-- <th>是否为偶数个元素</th> --> <!-- </tr> --> <!-- <s:iterator var="u" value="userArray" status="st"> --> <!-- <tr> --> <!-- <td><s:property value="#st.count" /></td> --> <!-- <td><s:property value="#st.index" /></td> --> <!-- <td><s:property value="#st.first" /></td> --> <!-- <td><s:property value="#st.last" /></td> --> <!-- <td><s:property value="#st.odd" /></td> --> <!-- <td><s:property value="#st.even" /></td> --> <!-- </tr> --> <!-- </s:iterator> --> <!-- </table> --> <!-- 迭代set集合 --> <!-- <s:iterator var="u" value="userSet" status="s"> --> <!-- <p> --> <!-- <s:property value="#u.name" /> --> <!-- <s:property value="#s.count" /> --> <!-- </p> --> <!-- </s:iterator> --> <!-- 迭代list集合 --> <!-- <s:iterator var="u" value="userList"> --> <!-- <p> --> <!-- <s:property value="#u.name" /> --> <!-- </p> --> <!-- </s:iterator> --> <!-- 迭代map集合 通过迭代变量的key属性获取map集合的key值 通过迭代变量的value属性获取map集合的value值 --> <!-- <s:iterator var="u" value="userMap"> --> <!-- <p> --> <!-- <s:property value="#u.key" /> --> <!-- <s:property value="#u.value.name" /> --> <!-- </p> --> <!-- </s:iterator> --> <!-- 对于一个map集合可以直接使用map.key形式获取map集合的元素 --> <!-- <s:property value="userMap.name1" /> --> <!-- 使用append元素拼接集合 --> <!-- <s:append var="newList"> --> <!-- <s:param value="{1,2,3,4}" /> --> <!-- <s:param value="{5,6,7,8}" /> --> <!-- </s:append> --> <!-- <s:append var="newList"> --> <!-- <s:param value="{1,2,3,4}" /> --> <!-- <s:param value="{5,6,7,8}" /> --> <!-- </s:append> --> <!-- <s:iterator value="#newList"> --> <!-- <s:property /> --> <!-- </s:iterator> --> <!-- 使用merge元素拼接集合 --> <!-- <s:merge var="newList"> --> <!-- <s:param value="{1,2,3,4}" /> --> <!-- <s:param value="{5,6,7,8}" /> --> <!-- </s:merge> --> <!-- <s:iterator var="num" value="#newList"> --> <!-- <p> --> <!-- <s:property value="#num" /> --> <!-- </p> --> <!-- </s:iterator> --> <!-- <s:generator separator="," val="'1,2,3,4,5,6'" count="3"> --> <!-- <s:iterator> --> <!-- <s:property /> --> <!-- </s:iterator> --> <!-- </s:generator> --> <!-- subset创建子集 --> <!-- <s:subset source="userList" start="0" count="3"> --> <!-- <s:iterator var="u"> --> <!-- <s:property value="#u.name" /> --> <!-- </s:iterator> --> <!-- </s:subset> --> <s:bean var="uc" name="com.test.web.utils.UserCompartor" /> <s:sort comparator="#uc" source="userList"> <s:iterator var="u"> <s:property value="#u.id" /> </s:iterator> </s:sort> </body> </html>

<!--
注意一点
struts2和核心标签库的区别
struts2的标签获取值可以用el表达式也可以用ognl表达式
核心标签只能用el表达式
-->