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从零单排第十六期《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)