package cn.newgxu.bbs.common.staticHtml; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletContext; import org.springframework.web.context.ServletContextAware; import cn.newgxu.bbs.common.util.Util; import cn.newgxu.bbs.domain.HitsCounter; import cn.newgxu.bbs.service.ForumService; import cn.newgxu.bbs.service.UserService; import cn.newgxu.bbs.web.action.AbstractBaseAction; import cn.newgxu.bbs.web.action.IndexAction; import cn.newgxu.bbs.web.model.OnlineStatus; import cn.newgxu.bbs.web.model.UserStatus; /** * @path valhalla_hx----cn.newgxu.bbs.common.staticHtml.StaticManager.java * * @author 集成显卡 * @since 4.0.0 * @version $Revision 1.1$ * @date 2011-6-4 * @describe 静态化管理类 * 静态web页面时,需要 ServletContext的支持,那么从哪里可以获取这个 ServletContext呢.<br /> * 在action中我们可以轻松获取 他,然后用他作为我们 的参数传进来。<br /> * 可是 没有在action中获取呢,比如 在filter中,莫非也要让filter 集成 HttpServlet》??<br /> * 这个先不说行不行,光是这样想就觉得很别扭了<br /> * 最后,选用的方案是, 在pojo中实现 Spring 的ServletContextAware 接口,然后由spring给我们自己加上ServletCOntext <br /> * 要实现这个目的,我们的pojo必须是 Spring 里面的一个 bean,不然你的数据从哪里来? <br /> * * * */ public class StaticManager implements ServletContextAware{ private ForumService forumService; private UserService userService; private ServletContext servletContext; /** * 如果 forumService 为空,那么就从 spring 的context中获取 对应的bean */ public void init(){ if(this.forumService==null) this.forumService=(ForumService)Util.getBean("forumService"); if(this.userService==null) this.userService=(UserService)Util.getBean("userService"); } /** * 静态化首页 */ public void staticIndex(ServletContext sc){ this.init(); UserStatus userStatus = new UserStatus(); userStatus.setTotalHicount(HitsCounter.getTotalHitsCounter()); userStatus.setTodayHicount(HitsCounter.getTodayHitsCounter()); this.setUserStatus(userStatus); OnlineStatus onlineStatus = new OnlineStatus(); //onlineStatus.setForumId(HttpUtil.getIntParameter(getRequest(),"forumId")); userService.onlineStatus(onlineStatus); String templateName="template/html/ftl/index.ftl"; String saveName="template/html/index.htm"; Map<String,Object> data=new HashMap<String ,Object>(); data.put("areas", this.forumService.getAreas()); data.put("topMoneyUsers", userService.getUsers(2, null) ); data.put("topTopicUsers", userService.getUsers(3, null)); data.put("topReplyUsers", userService.getUsers(4, null)); data.put("topGoodUsers", userService.getUsers(5, null) ); data.put("pubGoodTopics",forumService.getTopics(2, 7) ); data.put("pubHotTopics",forumService.getTopics(1, 7) ); data.put("topExpUsers", userService.getUsers(1, null)); data.put("userMessage", "${status.messageNotRead}"); data.put("userModel", this.getUserHtml()); data.put("status",userStatus); data.put("onlineStatus", onlineStatus); if(sc==null) sc=this.servletContext; StaticUtil.creatHtml(sc, templateName, saveName, data); } public void setUserStatus(UserStatus userStatus){ AbstractBaseAction aba=(IndexAction)Util.getBean("index"); aba.setStats(userStatus); } /** * 获取首页上用户的模版代码,首页上的用户模块是没有静态化的,直接输入 freemarker 模版的东西 * @return */ private String getUserHtml(){ StringBuilder sb=new StringBuilder(); sb.append("<div class=\"${topClass?default(\"header_night\")}\">"); sb.append("<div class='header_user'>"); sb.append("<span class='left'>嘿,欢迎您, <#if status.login>${status.nick}<#else>游客  </#if></span>"); sb.append("<span class='right'>"); sb.append("<#if status.login>"); sb.append("<a href='/user/upgrade.yws' >个人服务区</a>  "); sb.append("<a href='/getdraftboxes.yws' target='_blank'>草稿箱(${status.draftboxSize})</a>  "); sb.append("<a href='/diary/index.yws' target='_blank'>心情日记</a>  "); sb.append("<a href='/user/log.yws' target='_blank'>新手帮助</a>  "); sb.append("<a href='/accounts/logout.yws'>退出</a>  "); sb.append("<a href='#' onClick=\"messageList();\">新消息:${status.messageNotRead}条</a></#if></span></div>"); sb.append("<#if status.login == false>"); sb.append("<div class='header_login'>"); sb.append(" <form action='/accounts/login_do.yws' method='post'>"); sb.append("<div style='height:12px;'></div>"); sb.append("<div style='height:25px; padding-left:55px;padding-right:25px;'><input name='username' type='text' class='input2' id='username' size='8' /></div>"); sb.append("<div style='height:25px; padding-left:55px;'><input name='password' type='password' class='input2' id='password' size='8'/></div>"); sb.append("<div style='height:25px; padding-left:55px;'><input onFocus=\"javascript:$('validImage').src='/validImage_servlet';\" name='validCode' type='text' class='input_rand' id='validCode' autocomplete='off' size='4' /> <img src='/images/default_valid_img.png' align='top' id='validImage' /></div>"); sb.append("<div style='height:31px; padding-left:40px;'>"); sb.append("<input name=\"originalUrl\" type=\"hidden\" id=\"originalUrl\" value=\"${status.originalUrl?default('/')}\" />"); sb.append("<input type=image src='/images/dl1.gif' name='Image1' width='37' height='16' id='Image1' onclick=\"{target='_parent';}\" />"); sb.append("<img src='/images/zc1.gif' name='Image2' width='37' height='16' border='0' id='Image2' onclick=\"window.location.href='/accounts/register.yws'\"/>"); sb.append("</div></form></div></#if></div>"); return sb.toString(); } public void setServletContext(ServletContext arg0) { this.servletContext=arg0; } }