Struts 2 假分页

主要思想,将要分面的数据全部取出。放入bigList,再根据curentPage对大集合切割成分页要显示的数据smallList。

通过action请求在分面的jsp页面中输出smallList。调用分页控制pageController.jsp。

 

PageController.java

package articles.page;

import java.util.ArrayList;

//负责传入一个大的集合,根据页号返回所需要的数据
//计算总页数 =(总记录数+每页条数-1)/每页条数
//第N页显示第几条记录(记录从0开始算)? (N-1)*每页条数=<序号< N*每页条数

public class PageController {
	@SuppressWarnings("unchecked")
	private ArrayList bigList; // 大的集合,外界传入
	private int curentPageIndex = 1; // 当前页号,外界传入
	private int countPerpage = 5; // 每页条数,外界可以设定
	@SuppressWarnings("unchecked")
	private ArrayList smallList; // 小的集合,返回
	private int pageCount; // 页数
	private int recordCount; // 记录条数
	private int prePageIndex; // 上一页序号
	private int nextPageIndex; // 下一页序号
	private boolean firstPage; // 是否第一页
	private boolean lastPage; // 是否最后一页

	public void setCurentPage(String curentPage) {
		if (curentPage == null) {
			curentPage = "1";
		}
		int currentPageIndex = Integer.parseInt(curentPage);
		this.setCurentPageIndex(currentPageIndex);
	}

	@SuppressWarnings("unchecked")
	public void setCurentPageIndex(int curentPageIndex) {
		// 每当页数改变,都会调用这个函数,筛选代码可以写在这里
		this.curentPageIndex = curentPageIndex;

		// 上一页,下一页确定
		prePageIndex = curentPageIndex - 1;
		nextPageIndex = curentPageIndex + 1;
		// 是否第一页,最后一页
		if (curentPageIndex == 1) {
			firstPage = true;
		} else {
			firstPage = false;
		}
		if (curentPageIndex == pageCount || pageCount == 0) {
			lastPage = true;
		} else {
			lastPage = false;
		}
		// 筛选工作
		smallList = new ArrayList();
		for (int i = (curentPageIndex - 1) * countPerpage; i < curentPageIndex
				* countPerpage
				&& i < recordCount; i++) {
			smallList.add(bigList.get(i));
		}
	}

	@SuppressWarnings("unchecked")
	public void setBigList(ArrayList bigList) {
		this.bigList = bigList;
		// 计算条数
		recordCount = bigList.size();
		// 计算总页数 =(总记录数+每页条数-1)/每页条数
		pageCount = (recordCount + countPerpage - 1) / countPerpage;
	}

	public int getCountPerpage() {
		return countPerpage;
	}

	@SuppressWarnings("unchecked")
	public ArrayList getBigList() {
		return bigList;
	}

	public int getCurentPageIndex() {
		return curentPageIndex;
	}

	public void setCountPerpage(int countPerpage) {
		this.countPerpage = countPerpage;
	}

	@SuppressWarnings("unchecked")
	public ArrayList getSmallList() {
		return smallList;
	}

	@SuppressWarnings("unchecked")
	public void setSmallList(ArrayList smallList) {
		this.smallList = smallList;
	}

	public int getPageCount() {
		return pageCount;
	}

	public void setPageCount(int pageCount) {
		this.pageCount = pageCount;
	}

	public int getRecordCount() {
		return recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	public int getPrePageIndex() {
		return prePageIndex;
	}

	public void setPrePageIndex(int prePageIndex) {
		this.prePageIndex = prePageIndex;
	}

	public int getNextPageIndex() {
		return nextPageIndex;
	}

	public void setNextPageIndex(int nextPageIndex) {
		this.nextPageIndex = nextPageIndex;
	}

	public boolean isFirstPage() {
		return firstPage;
	}

	public void setFirstPage(boolean firstPage) {
		this.firstPage = firstPage;
	}

	public boolean isLastPage() {
		return lastPage;
	}

	public void setLastPage(boolean lastPage) {
		this.lastPage = lastPage;
	}

}

 

*.action

public class ArticleAction extends ActionSupport {
	private Article article;
	private ArticleFacade articleFacade;
	private List listOperate;
	private PageController pc;

	public ArticleAction() {
		articleFacade = new ArticleFacadeImpl();
	}

	public List getListOperate() {
		return listOperate;
	}

	public PageController getPc() {
		return pc;
	}

	public void setPc(PageController pc) {
		this.pc = pc;
	}

	
public String operateList() {
		operatelogFacade = new OperatelogFacadeImpl();
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		User user1 = (User) session.getAttribute("user");
		
		pc = (PageController) request.getAttribute("pc");
		if (pc == null) {
			pc = new PageController();
			List listOperateBig = operatelogFacade.selectOperatelog(user1
					.getUserID());
			pc.setBigList((ArrayList) listOperateBig);
			request.setAttribute("pc", pc);
		}
		
		pc.setCurentPage(request.getParameter("PageIndex"));
		listOperate = pc.getSmallList();

		if ("1".equals(user1.getSystemRole())) {
			return "authorOperate";
		} else if ("2".equals(user1.getSystemRole())) {
			return "auditOperate";
		}
		return "error";
	}
}

 

struts.xml

		<action name="authorOperatelog"
			class="articles.action.ArticleAction" method="operateList">
			<result name="authorOperate">/author/author_operatelog.jsp</result>
			<interceptor-ref name="sessionInterceptor"></interceptor-ref>
		</action>

 author_operatelog.jsp

<%@ page language="java" contentType="text/html;charset=gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
	<head>
		<title>刊物文章管理系统</title>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
	</head>
	<body bgcolor="#ceeef4">
		<div align="center">
			<p>

				<br>
				<font size="5" color="#000099"><b>操作日志</b> </font>
			</p>
			<table cellspacing="0" cellpadding="5" border="1" width="90%">
				<tr bgcolor="#bebef4">
					<td width="20%">
						<b><font size="4">操作类型</font> </b>
					</td>
					<td width="50%">
						<b><font size="4">操作对象</font> </b>
					</td>
					<td width="30%">
						<b><font size="4">操作时间</font> </b>
					</td>
				</tr>
				<s:iterator value="listOperate" status="stat">
					<tr <s:if test="#stat.even"> bgcolor="#D7EBFF" </s:if>>
						<td>
							<s:property value="operateType" />
						</td>
						<td>
							<s:property value="destination" />
						</td>
						<td>
							<s:property value="operateDatetime" />
						</td>
					</tr>
				</s:iterator>
			</table>
			<s:set name="myAction" value="%{'authorOperatelog'}" scope="action" />
			<s:include value="../pageController.jsp" />
		</div>
	</body>
</html>

 

 

pageController.jsp

<%@ page language="java" contentType="text/html;charset=gbk"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:if test="pc.pageCount == 0">
</s:if>
<s:else>
	<p align="center">
		<a
			href='<s:url action="%{#attr.myAction}"> 
			<s:param name="PageIndex" value="1"/></s:url>'>[首页]</a>

		<s:if test="pc.firstPage == false">
			<a
				href='<s:url action="%{#attr.myAction}"> 
			<s:param name="PageIndex" value="pc.prePageIndex"/></s:url>'>[上一页]</a>
		</s:if>
		
		<s:if test="pc.lastPage == false">
			<a
				href='<s:url action="%{#attr.myAction}"> 
			<s:param name="PageIndex" value="pc.nextPageIndex"/></s:url>'>[下一页]</a>
		</s:if>

		<a
			href='<s:url action="%{#attr.myAction}"> 
			<s:param name="PageIndex" value="pc.pageCount"/></s:url>'>[尾页]</a>
		第[
		<s:property value="pc.curentPageIndex" />
		]页 共[
		<s:property value="pc.pageCount" />
		]页
	</p>
</s:else>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值