利用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("下一页");
}
})
效果图如下:
首页:
尾页: