ofbiz框架入门例子详解-------分页篇

利用ofbiz分页展示数据


  • 编写service类
public static Map<String, Object> showUsersByPage(DispatchContext ctx, Map<String, ? extends Object> context){
		Map<String,Object> results = ServiceUtil.returnSuccess();
		String message = (String) context.get("message");
		//delegator对象可以操作数据
		GenericDelegator delegator = ctx.getDelegator();
		
		int currentPage = (Integer) context.get("currentPage");

		try{
			//查询到全部的user
			List<GenericValue> users = delegator.findList("User", null, null, null, null, false);
			
			//计算总页数
			int totalPage;
			if(users.size()%3 == 0)
				totalPage = users.size()/3;
			else totalPage = users.size()/3 + 1;
			//根据当前页计算开始下标
			int fromIndex = (currentPage-1)*3;
			//截取当前页的user列表
			List<GenericValue> pageUsers;
			if(fromIndex + 3 < users.size()){
				pageUsers = users.subList(fromIndex, fromIndex + 3);
			}else{
				pageUsers = users.subList(fromIndex, users.size());
			}
	
			//返回
			message = "load~ success : " + pageUsers.size();
			results.put("users", pageUsers);
			results.put("totalPage", totalPage);
			results.put("currentPage", currentPage);
			
		}catch(Exception e){
			message = "Error";
		}


		System.out.println(message);
		results.put("message", message);
		//返回参数
		return results;
	}

  • 配置service
<service name="showUsersByPage" engine="java" location="com.diyagea.service.UserService" invoke="showUsersByPage">
    	<!-- INOUT输入输出参数 -->
		<attribute name="currentPage" mode="IN" type="Integer"/>		
		<attribute name="message" mode="INOUT" type="String" optional="true"/>
		<!-- OUT输出参数 -->
		<attribute name="users" mode="OUT" type="java.util.List" optional="true"/>
		<attribute name="totalPage" mode="OUT" type="Integer" optional="true"/>
		<attribute name="currentPage" mode="OUT" type="Integer" optional="true"/>
	</service>


  • 编写event类
 public static String showByPage(HttpServletRequest req, HttpServletResponse resp) throws UnsupportedEncodingException {
		 
		 LocalDispatcher dispatcher = (LocalDispatcher) req.getAttribute("dispatcher");
		 Map<String, Object> results = null;
		 Map<String, Object> contexts = UtilMisc.toMap();
		 
		 String page = req.getParameter("currentPage");
		 //防止当前页参数为空,(访问首页时)
		 page = page==null || "".equals(page)  ? "1" : page;
		 int currentPage = Integer.parseInt(page);

		 contexts.put("message", "event-send");
		 contexts.put("currentPage", currentPage);
		 
		 try {
			results = dispatcher.runSync("showUsersByPage", contexts);
		 } catch (GenericServiceException e) {
			e.printStackTrace();
			return "error";
		 }
		 
		 List<GenericValue> users = (List<GenericValue>) results.get("users");
		 
		 if(!(users.size() > 0)){
			 return "error";
		 }
		 		 
		 req.setAttribute("users", users);
		 req.setAttribute("mes", results.get("message"));
		 req.setAttribute("totalPage", results.get("totalPage"));
		 req.setAttribute("currentPage", results.get("currentPage"));
		 
		 return "success";
	 }

  • 配置controller.xml 的request-map
<request-map uri="showByPage">
    	<security https="true" auth="false"/>
    	<event type="java" path="com.diyagea.event.UserEvent" invoke="showByPage"></event>
    	<response name="success" type="view" value="show"/>
    </request-map>

  • 展示层(freemaker)
<table border="1">
		<tr>
			<td>
				username
			</td>
			<td>
				password
			</td>
			<td>
				pickname
			</td>
			<td>
				registerDate
			</td>
		</tr>
	
		<#assign users = request.getAttribute("users")?if_exists>
		
		<#list users as user>  
			<#if user.username?? && user.username != "">
				<tr>
				<td>${user.username}</td>
				<td>${user.password}</td>
		  		<td>${user.nickname}</td>
		  		<td>${user.registerdate}</td>
		  		<td><a href="updatePage?userID=${user.id}" ><input type="button" value="update"/></a></td>
		  		<td><a href="deleteUser?userID=${user.id}" ><input type="button" value="delete" οnclick="return confirm('delete this?')" /></a></td>
		  		<tr>  
	  		</#if>
		</#list>
	</table>
	
	<#assign currentPage = request.getAttribute("currentPage")?if_exists>
	<#assign totalPage = request.getAttribute("totalPage")?if_exists>
	
	<span id="spanFirst"><a href="showByPage?currentPage=1" >${uiLabelMap.homePage}</a></span> 
	<span id="spanPre"><a href="showByPage?currentPage=${currentPage-1}" >${uiLabelMap.prevPage}</a></span> 
	<span id="spanNext"><a href="showByPage?currentPage=${currentPage+1}" >${uiLabelMap.nextPage}</a></span> 
	<span id="spanLast"><a href="showByPage?currentPage=${totalPage}" >${uiLabelMap.endPage}</a></span> 

编写一个js来控制当在首页的时候不能点击上一页,尾页同理
用jquery写的,代码如下:

$(document).ready(
	        function() {
	          	var currentPage = ${currentPage};
	          	var totalPage = ${totalPage};
	          	
	          	//alert(currentPage);
	          	
	          	if(currentPage == 1){
		            $("#spanFirst").html("首页");
		            $("#spanPre").html("上一页");
	          	}
	          	if(currentPage == totalPage){
		            $("#spanLast").html("尾页");
		            $("#spanNext").html("下一页");
	          	}
          	
        })



效果图如下:

首页:

尾页:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值