java web从零单排第十六期《struts2》控制标签(2)
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标签概述:
属性名是否必需默认值类型说明介绍comparatortrue——java.util.Comparator排序器实例sourcefalse——String要排序的集合varfalse——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 {@Overridepublic int compare(Object o1, Object o2) {// TODO Auto-generated method stubif(((UserInfo)o1).getWeight()>((UserInfo)o2).getWeight())return 1;elsereturn -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>
运行结果:
小结:熟练掌握#的运用非常重要。