研究:Liferay研究(四)Liferay中进行分页-----------------假分页之二

创建完基本分页的工具类之后,然后就是到action里面的内容了,因为是连接到对方的数据库,所以有些代码省略.在Action中定义如下:

package org.lxh.action;

public class OtherFavoMoreAction extends BaseAction {
	// 测试分页参数
	private static final int DEFAULTLINESIZE = 20;
	private static final int DEFAULTCURPAGE = 1;
	// 每页多少条数据
	private int pagesize;
	// 数据中总记录数
	private int pagetoal;
	// 当前页
	private int curpage;
	// 需要分多少页
	private int totalsplitpage;

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		ConnectionService connectionService = (ConnectionService) this
				.getBean("connectionService");
		Map<String, Object> map = new HashMap<String, Object>();
		ShowControlBean showControl = getShowControl(request);

		try {
			DataCount = Integer.parseInt(request.getParameter("datacount"));
			String startIx = this.getParam(request, "startIx");			
			String maxAssets = this.getParam(request, "maxAssets");
			// 每次要显示多少条记录
			if (StringUtils.isEmpty(maxAssets))
				pagesize = DEFAULTLINESIZE;
			else
				pagesize = Integer.parseInt(maxAssets);
			// 起始页
			String startIx = this.getParam(request, "startIx");
			if (StringUtils.isEmpty(startIx)) {
				curpage = DEFAULTCURPAGE;
				System.out
						.println("first---------------------------" + curpage);
			} else {
				curpage = Integer.parseInt(startIx);
				System.out.println("se---------------------------" + curpage);
			}
			/*----------------------------------------------------------------------------*/
			// 当前页
			List<User> vo = new ArrayList<User>();
			List sqlList = userList.getMoreUser(DataCount);
			// 无数据时取数
			
				for (int i = 0; i < sqlList.size(); i++) {
					User user= new User();
					user= userService.getuser;
                                 	if (user== null)
						continue;
					else
						vo.add(user);
					map.clear();
				}
				// 去掉空值的总记录数
				pagetoal = vo.size();
				totalsplitpage = PageUtil.spiltPage(pagetoal, pagesize);
						// 是否首页
			request.setAttribute("isHomePage", PageUtil.ishomepage(curpage));
			// 是否末页
			request.setAttribute("isLastPage", PageUtil.islast(curpage,
					totalsplitpage));
			// 是否有上一页
			request.setAttribute("isFist", PageUtil.isfirst(curpage));
			// 是否有下一页
			request.setAttribute("isNext", PageUtil.isnext(curpage,
					totalsplitpage));
			// 当前页
			request.setAttribute("curpage", curpage);
			// 一共有多少数据
			request.setAttribute("toal", pagetoal);
			// 要分多少页
			request.setAttribute("pages", totalsplitpage);
			// 每条多少记录
			request.setAttribute("linesize", pagesize);
			// 分页数据
			request.setAttribute("vo", PageUtil.splitPageByListAssetVo(vo,
					pagesize, curpage));
			request.setAttribute("DataCount", DataCount);
			return mapping.findForward("view");
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}

	}

}

当页面点下一页的时候会跳转到这个action里面然后进行分页的处理,处理完之后返回一个List集合然后再次request到要显示的Jsp页面上去,虽然在Liferay中需要获取sp参数需要调用paramUtil方法取得数值,由于在项目中用的不是基于liferay ext的开发模式,只是利用了portlet的桥接,所以单纯的request.getParameter就可以取到需要的值.上面用到的 getParam是从request中进行处理后再返回的,防止了空指针的异常做出的优化.

 
在jsp中action的传递不再是单纯的输入<%=request.getContextPath()%>/xxxx 指的是Struts中配置的action名字,而需要用到portlet的标签
<portlet:renderURL windowState="normal" portletMode="view" ></portlet:renderURL>
windowState是窗口的大小,portletMode是Portlet的状态,可以选择是显示还是隐藏还是编辑
在portlet中还有个重要的标签就是<portlet:namespace />因为分页跳转是通过JavaScript控制的,但是由于每个portlet对应的JavaScript操作的方式都不一样,所以需要在执行方法的时候加上<portlet:namespace />这个标签,这个标签是代表当前portlet唯一的标识,可以保证该方法和该属性是仅属于当前portlet的
 
posted @ 2010-04-10 21:02  EdwardLau  阅读(1239)  评论(0编辑  收藏  举报