java web从0单排第十六期《struts2》控制标签(2)

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>


运行结果:

java web从0单排第十六期《struts2》控制标签(2)

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>


运行结果:

java web从0单排第十六期《struts2》控制标签(2)


小结:熟练掌握#的运用非常重要。