//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表达式
-->