【Java开源代码栏目提醒】:网学会员Java开源代码为您提供TopicMainAction.java参考,解决您在TopicMainAction.java学习中工作中的难题,参考学习。
/*
* TopicInitAction.java
*
* Created on 2006年6月14日, 上午2:37
*/
package action.bbs;
import dbservice.hibernate.HibernateService;
import dbservice.hibernate.PageCounter;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.
bbs.hibernate.*;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
/**
*
* @author Administrator
* @version
*/
public class TopicMainAction extends Action {
/* forward name="success" path="" */
private final static String SUCCESS = "success";
/**
* This is the action called from the Struts framework.
* @param mapping The ActionMapping used to select this instance.
* @param form The optional ActionForm bean for this request.
* @param request The HTTP Request we are processing.
* @param response The HTTP Response we are processing.
* @throws java.lang.Exception
* @return
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 从用户Http请求中得到参数id的值,即当前的主题空间的编号
String id = request.getParameter("id");
// 从用户Http请求中得到参数page的值,即当前数据库游标移动方式
String page = request.getParameter("page");
// 获得HttpSession缓存
HttpSession httpSession = request.getSession();
// 从缓存中获得计数器
PageCounter pageCounter = (PageCounter)httpSession.getAttribute("articlepagecounter");
if (pageCounter == null) {
pageCounter = new PageCounter();
httpSession.setAttribute("articlepagecounter", pageCounter);
}
// 设置页面最大允许显示的信息数量;也即访问数据库时,游标的最大活动范围
pageCounter.setMaxSize(20);
// 统计编号为id的主题空间中的文章数量
int rows = HibernateService.getRows("select count(*) from Article article where article.topic.id=" + id);
pageCounter.setTotalRows(rows);
int pages = rows % pageCounter.getMaxSize();
pages = pages == 0 ? rows/pageCounter.getMaxSize() : rows/pageCounter.getMaxSize() + 1;
pageCounter.setTotalPages(pages);
pageCounter.counter(page);
// 数据库游标从pageCounter.getFirstRow()开始, 活动范围为pageCounter.getMaxSize()。
// 在这个限制条件下,统计编号为id的主题空间中的文章数量
List articleList = HibernateService.execQuery("from Article article where article.topic.id=" + id, pageCounter.getFirstRow(), pageCounter.getMaxSize());
if (articleList == null) {
return new ActionForward(mapping.getInput());
}
// 读取数据库中编号为id的主题空间信息
Topic topic = TopicUtil.find(id);
if (topic == null) {
return new ActionForward(mapping.getInput());
}
List responseCountList = new ArrayList();
for (int i=0; i<articleList.size(); i++) {
String articleId = String.valueOf(((Article)articleList.get(i)).getId());
// 统计编号为articleId的文章的回复数量
int count = HibernateService.getRows("select count(*) from Articleresponse response where response.article.id='" + articleId + "'");
responseCountList.add(new Integer(count));
}
// 将主题空间信息存入缓存
httpSession.setAttribute("topic", topic);
// 将文章信息存入缓存
httpSession.setAttribute("articlelist", articleList);
// 将文章回复数量信息存入缓存
httpSession.setAttribute("responsecountlist", responseCountList);
return mapping.findForward(SUCCESS);
}
}