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>

运行结果:

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

java web从零单排第十六期《struts2》控制标签(2)的更多相关文章

  1. java web从零单排第二十一期《Hibernate》主键的生成方式,用户增加与显示用户列表

    1.新建register.jsp <%@ page language="java" import="java.util.*" pageEncoding=& ...

  2. java web从零单排第二十二期《hibernate》代码分析之查看,删除用户信息

    前两期的内容不知道大家理解的怎么样,我并没有详细的去解释代码的意思,如果你已经自己都钻研明白了,那最好过,但还是一知半解的话,接下来我会仔细分析代码. 1.register.jsp:这部分代码只是简单 ...

  3. (十六)Struts2的标签库

    一.简介 Struts2的标签库使用OGNL为基础,大大简化了数据的输出,也提供了大量标签来生成页面效果,功能非常强大. 在早期的web应用开发中,jsp页面主要使用jsp脚本来控制输出.jsp页面嵌 ...

  4. java web从零单排第十七期《struts2》数据标签库(1)

    1.s:action标签: 此标签的作用是在JSP页面中访问action类的数据,执行某些操作,并返回相应的数据.其属性及意义如下: 属性名 是否必需 默认值 类型 说明介绍 executeResul ...

  5. Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

    Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...

  6. 风炫安全web安全学习第三十六节课-15种上传漏洞讲解(一)

    风炫安全web安全学习第三十六节课 15种上传漏洞讲解(一) 文件上传漏洞 0x01 漏洞描述和原理 文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把 ...

  7. 二十六:Struts2 和 spring整合

    二十六:Struts2 和 spring整合 将项目名称为day29_02_struts2Spring下的scr目录下的Struts.xml文件拷贝到新项目的scr目录下 在新项目的WebRoot-- ...

  8. PYG5.4第十六期第一轮基础六题

    1. HYWZ-dts音效大师破解https://www.chinapyg.com/thread-135090-1-1.html(出处: 飘云阁(PYG官方论坛) ) 2. HYWZ-LopeEdit ...

  9. 【Java Saves!】Session 6:十六指星人

    前面说,计算机用2个手指头数数,它内部的数是二进制,有0和1两个数字.也看到,对于人来说,二进制数too long, too inconvenient, sometimes troublesome.程 ...

随机推荐

  1. IOS常用设计模式之委托模式

    对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模 ...

  2. 大数据时代的 9 大Key-Value存储数据库

    在过去的十年中,计算世界已经改变.现在不仅在大公司,甚至一些小公司也积累了TB量级的数据.各种规模的组织开始有了处理大数据的需求,而目前关系型数据库在可缩放方面几乎已经达到极限. 一个解决方案是使用键 ...

  3. UVA 718 - Skyscraper Floors(数论)

    UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电 ...

  4. COCOS2D-X之圆形进度条的一个简单Demo

    这应该是游戏中很常见的一个效果.显示某个事件的进度等,在加载资源或者联网的时候经常用到.所以有必要学习学习 一.我们直接在COCOS2D-X自带的HelloCpp的工程中添加代码即可.我们在初始化中添 ...

  5. android5.0(Lollipop) BLE Central牛刀小试

    转载请表明作者:http://blog.csdn.net/lansefeiyang08/article/details/46482073 昨天写了android L BLE Peripheral的简单 ...

  6. 14.10.3 InnoDB Checkpoints InnoDB 检查点:

    14.10.3 InnoDB Checkpoints InnoDB 检查点: 你的log files 变的很大可能会降低磁盘性能在checkpointing的时候, 它通常设置设置log files总 ...

  7. perl 循环类选择器 ,爬取内容

    jrhmpt01:/root/lwp/0526# cat 0526.txt <div class="TXD_sy_title"><span class=" ...

  8. Apriori算法实现

    Apriori算法原理:http://blog.csdn.net/kingzone_2008/article/details/8183768 import java.util.HashMap; imp ...

  9. iot 表主键存放所有数据,且按数据插入顺序排序

    iot表测试: 在create table语句后面使用organization index,就指定数据表创建结构是IOT.但是在不指定主键Primary Key的情况下,是不允许建表的. create ...

  10. char *和char[]的区别,困扰很长时间了,总结下

    char c1[] = "hello";// char *c2 = "hello";// 区别1: c1是一个局部数组,c2是一个全局数组. 局部数组c1是局部 ...