1.s:subset标签概述:
s:subset标签功能是从一个集合中取出部分元素合并成一个新的集合,新生成的这个集合是原来集合的子集。属性和意义如下:
属性名 | 是否必需 | 默认值 | 类型 | 说明介绍 |
---|---|---|---|---|
count |
false |
—— |
Integer |
获得原始集合中元素的个数 |
decider |
false |
—— |
org.apache.struts2.util.SubsetIteratorFilter.Decider |
过滤的条件 |
source |
false |
—— |
String |
源集合数据 |
start |
false |
—— |
String |
从哪个位置开始,从索引0开始 |
var |
false |
—— |
String |
新的集合存储在page上下文的名称 |
在action中对List集合对象进行数据填充
下面通过实例演示从一个List取出部分元素
新建action类ShowSubSetList,代码如下:
package controller; import java.util.ArrayList; import bean.BBS; public class ShowSubSetList { private ArrayList listBBS = new ArrayList(); public ArrayList getListBBS() { return listBBS; } public void setListBBS(ArrayList listBBS) { this.listBBS = listBBS; } public String execute() { BBS BBSRef1 = new BBS(); BBSRef1.setAuthor("niujiabin"); BBSRef1.setTitle("hello1"); BBS BBSRef2 = new BBS(); BBSRef2.setAuthor("Maybe"); BBSRef2.setTitle("hello2"); BBS BBSRef3 = new BBS(); BBSRef3.setAuthor("GossipGo"); BBSRef3.setTitle("hello3"); listBBS.add(BBSRef1); listBBS.add(BBSRef2); listBBS.add(BBSRef3); return "showsubsetlist"; } }
新建填充集合的实体类:
package bean;
public class BBS {
private String title;
private String author;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
对象集合去取子集:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <s:submit source = "listBBS" var="newSubList" count="2" start="0"> <s:iterator var="BBSBean" value="#attr.newSubList"> <s:property value="#BBSBean.author"/> </s:iterator> </s:submit> </body> </html>
在上一节开始说过,OGNL中的#号可以取出Context中存放的对象,这里我们们看到了一个attr,它的作用是按pageContext》request》session》application顺序访问其属性,本例的#attr.newSubList相当于按顺序从三个范围读取newSubList属性直到找到为止。我们可以使用session的setAttribute()等方法设定一个进程可以共享的属性对象,使用session设定的属性在同一个进程中可以共享,除了session之外,还有pageContext、request、application也都可以使用setAttribute()之类的方法(详请查阅API文件)来设定可以共享的属性对象,只不过这四个对象所设定的属性其共享范围各不相同。
使用pageContext所设定的属性对象,其共享范围限于同一个JSP页面,使用request所设定的属性对象,其在同一个request处理期间可以共享(包括forward给其它JSP页面),session对象所设定的属性对象则限于同一个进程作用期间可以共享,而application对象所设定的属性,则在整个Web应用程序中的JSP页面都可以共享。
配置文件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/dtd/struts-2.0.dtd"> <struts> <package name="Maybe" extends="struts-default"> <action name="showsubsetlist" class="controller.ShowSubSetList"> <result name="showsubsetlist">/showsubsetlist.jsp</result> </action> </package> </struts>
运行结果:
2.按集合中的个人中进行排顺序
s:sort标签概述:
属性名 | 是否必需 | 默认值 | 类型 | 说明介绍 |
comparator | true | —— | java.util.Comparator | 排序器实例 |
source | false | —— | String | 要排序的集合 |
var | false | —— | String | 排序后的集合,放到page上下文中 |
在action中创建并填充要排序的List集合对象:
package bean; public class UserInfo { private String name; private int weight; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getWeight() { return weight; } public void setWeight(int weight) { this.weight = weight; } }
创建List集合对象中的实体类:
package controller; import java.util.ArrayList; import bean.UserInfo; public class ShowSortList { private ArrayList listUserInfo = new ArrayList(); public ArrayList getListUserInfo() { return listUserInfo; } public void setListUserInfo(ArrayList listUserInfo) { this.listUserInfo = listUserInfo; } public String execute() { UserInfo User1 = new UserInfo(); User1.setName("niujiabin"); User1.setWeight(12); UserInfo User2 = new UserInfo(); User2.setName("maybe"); User2.setWeight(13); UserInfo User3 = new UserInfo(); User3.setName("gossip"); User3.setWeight(14); listUserInfo.add(User3); listUserInfo.add(User2); listUserInfo.add(User1); return "showsortlist"; } }
创建排序策略实现Comparator接口的工具类:
package sort; import java.util.Comparator; import bean.UserInfo; public class SortWeight implements Comparator { @Override public int compare(Object o1, Object o2) { // TODO Auto-generated method stub if(((UserInfo)o1).getWeight()>((UserInfo)o2).getWeight()) return 1; else return -1; } }
对集合对象List进行排序:
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%> <%@ taglib uri="/struts-tags" prefix="s" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> <s:bean name="sort.SortWeight" var="sortRef"></s:bean> <s:sort comparator="#sortRef" source="listUserInfo" var ="newlistUserInfo"> <s:iterator value="#attr.newlistUserInfo" var="userInfoRef"> name:<s:property value="#userInfoRef.name"/> weight:<s:property value="#userInfoRef.weight"/> </s:iterator> </s:sort> </body> </html>
这里用到了struts2中的bean标签,非常简单,这里不再赘述。如果大家还没明白#的使用,可以简单地理解为,对于在action中的属性(set和get方法),我们不需要使用#,相反,对于不在action中的属性(没有set和get方法)对其取值时必须加#,之后在考虑其所在范围,是pageContext,request,session,application中的哪一个,attr比较万能的方法,希望大家灵活运用。
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/dtd/struts-2.0.dtd"> <struts> <package name="Maybe" extends="struts-default"> <action name="showsortlist" class="controller.ShowSortList"> <result name="showsortlist">/showsortlist.jsp</result> </action> </package> </struts>
运行结果:
小结:熟练掌握#的运用非常重要。