作者:张纪豪(转载请注明出处)
(四)、控制层取得分页数据
在上一篇中强调本主题要阐述的是分页,不搞那么复杂,所以省掉服务层代码,我们直接在控制层的Action里调用Dao层组件。
工作之前,我们先在com.zhangjihao.util包下做一个工具类,用来从请求参数中得到页码值:
WebUtil.java
package com.zhangjihao.util;
import javax.servlet.http.HttpServletRequest;
public class WebUtil {
//根据指定参数在Request对象得到整数值,如果为空或出错则返回给定的默认值
public static int getIntByRequestParament(HttpServletRequest request, String param, int defaultvalue){
try {
return Integer.parseInt(request.getParameter(param));
} catch (Exception e) {
return defaultvalue;
}
}
}
开始在com.zhangjihao.web.struts.action建立两个Action:
BookAction.java
package com.zhangjihao.web.struts.action;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Controller;
import com.zhangjihao.bean.Page;
import com.zhangjihao.dao.BookDao;
import com.zhangjihao.util.WebUtil;
@Controller("/listBook") //注意这个注解,它的作用是将这个action交给Spring管理,实现SSH集成
public class BookAction extends Action {
//注入一个bookDao数据访问组件
@Resource BookDao bookDao;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//从request对象里得到页码信息,如果为空或不是数值都返回1
int pageindex = WebUtil.getIntByRequestParament(request, "pageindex", 1);
//构造一个page对象,第1个参数是当前页,第2个参数是该页最大记录数,第3个是页码上的连接地址
Page page = new Page(pageindex,20,"listBook.do");
//将page对象送到数据访问组件层,返回当前页的数据借助request作用域送到视图层,
//当然也可以封装到page对象里
request.setAttribute("books", bookDao.listAllBooks(page));
//出来后的page对象已经有了总记录数了,自然就有了页码信息
request.setAttribute("page", page);
return mapping.findForward("list");
}
}
NewsAction.java
package com.zhangjihao.web.struts.action; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.springframework.stereotype.Controller; import com.zhangjihao.bean.Page; import com.zhangjihao.dao.NewsDao; import com.zhangjihao.util.WebUtil; @Controller("/listNews") //注意这个注解,它的作用是将这个action交给Spring管理,实现SSH集成 public class NewsAction extends Action { //注入一个newsDao数据访问组件 @Resource NewsDao newsDao; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { //从request对象里得到页码信息,如果为空或不是数值都返回1 int pageindex = WebUtil.getIntByRequestParament(request, "pageindex", 1); //构造一个page对象,第1个参数是当前页,第2个参数是该页最大记录数,第3个是页码上的连接地址 Page page = new Page(pageindex,20,"listNews.do"); //将page对象送到数据访问组件层,返回当前页的数据借助request作用域送到视图层, //当然也可以封装到page对象里 request.setAttribute("newses", newsDao.listAllNews(page)); //出来后的page对象已经有了总记录数了,自然就有了页码信息 request.setAttribute("page", page); return mapping.findForward("list"); } }
再到struts-config.xml文件配置两个action
后面进行视图层内容,也是最重要的内容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" "http://struts.apache.org/dtds/struts-config_1_3.dtd"> <struts-config> <form-beans> </form-beans> <global-forwards> <forward name="message" path="/WEB-INF/page/public/message.jsp"/> </global-forwards> <action-mappings> <!-- BookAction,注意这个path中的值与Action类名上的注解内容一致--> <action path="/listBook" validate="false" scope="request"> <forward name="list" path="/WEB-INF/page/public/list_book.jsp"/> </action> <!-- NewsAction,大家发现是不是没有写type属性,交给Spring管理后就可以省掉了--> <action path="/listNews" validate="false" scope="request"> <forward name="list" path="/WEB-INF/page/public/list_news.jsp"/> </action> </action-mappings> <!-- 将控制器交给Spring,也意思着编写的Action都由Spring管理--> <controller> <set-property property="processorClass" value="org.springframework.web.struts.DelegatingRequestProcessor"/> </controller> <message-resources parameter="ApplicationResources" /> <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/> </plug-in> </struts-config>