分页时关于添加Bean的改进

分页优化的一种方式

1.问题的出现:

有分页的JSP页面中,在 最后一页 添加一个bean时,添加成功后的页面跳转应当分为两种情况:
第一种:该页的记录数未满,则跳转回本页;
第二种:该页的记录数已满,则跳到最后一页。
我暂且将这种功能称为:溢出自动翻页功能

2.解决方法的步骤:

(1).在添加按钮的连接上添加参数:

href="pages/manager/book_edit.jsp?pageNo=${ requestScope.page.pageNo}&pageNum=${ requestScope.page.pageTotal }"

两个参数分别是:
pageNo: 添加前的当前分页
pageNum: 添加前的分页总数

form 提交 book 的信息,action=add,再使用反射调用Servlet中的 add() 方法

(2).在Servlet程序的 add() 方法中进行判断:

①.获取book对象,并调用Service进行添加;
②.调用 pageOfAdd() 方法,获取 添加后的当前页和总页数
③.获取 request 参数中的 添加前的当前页和总页数
④.判断添加前后的总页数是否一致,且添加前的当前页是否是添加前的最后一页(即添加前的总页数);
⑤.根据判断结果来设置不同的路径,重定向至 page() 方法中。
⑥.测试后,JSP页面可以实现溢出自动翻页功能,流程合理可行,所以也没有报异常。

(3).附上代码:add() 方法和 page() 方法

add():

	protected void addBook(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		Book book = Utils.copyParamToBean(new Book(), request.getParameterMap());
		bookService.addBook(book);
		
		Page<Book> page = pageOfAdd(request, response);

		int pageNo = Utils.paseInt(request.getParameter("pageNo"), page.getPageNo());
		int pageTotal = Utils.paseInt(request.getParameter("pageTotal"), page.getPageTotal());
		
		String path = request.getContextPath() + "/manager/bookServlet?action=page&pageNo=";
		
		if (page.getPageTotal() != pageTotal && pageNo == pageTotal) {
			path = path + (pageNo + 1);
		} else {
			path = path + pageNo; 
		}
		response.sendRedirect(path);
	}

其中的page() 方法:

	protected Page<Book> pageOfAdd(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		int pageNo = Utils.paseInt(request.getParameter("pageNo"), 1);
		int pageSize = Utils.paseInt(request.getParameter("pageSize"), Page.PAGE_SIZE);

		return bookService.page(pageNo, pageSize);
	}

3.总结:

刚开始时,我采用的解决方法是在 page() 方法中进行判断:
(1).在add() 方法中,转发到page() 的路径中添加一个特有参数 用以标记这是 add() 方法,在page() 中,就可以通过判断这个参数是否存在而分辨出这是add() 方法重定向过来的。
(2).在判断后,如果符合条件,那么再次重定向给 page() 方法,即重定向给自己。
(3).虽然在JSP页面中确实也可以实现溢出自动翻页功能,但是,控制台却报了反射的异常,异常出在 BaseServlet类中的doPost() 方法中:

	try {
		method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
		method.invoke(this, request, response);
	} catch (Exception e) {
		e.printStackTrace();
	}

究竟是什么原因导致的异常,我并没有找到。

从业务流程来看,只有add() 方法会用到溢出自动翻页功能,那么按照各做己事的原则,也应当交由 add() 方法来解决这个功能,page() 只管接收就行了。
进一步优化:可以将判断交由另一个方法来实现,返回一个字符串作为重定向地址就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值