/* * Copyright 2002-2006 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.openuap.cms.comment.action; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.openuap.base.util.ControllerHelper; import org.openuap.base.util.QueryInfo; import org.openuap.base.util.context.PageBuilder; import org.openuap.cms.comment.ICommentPost; import org.openuap.cms.comment.ICommentThread; import org.openuap.cms.comment.manager.CommentManager; import org.openuap.cms.engine.profile.PublishProfileInfoHolder; import org.openuap.runtime.util.ObjectLocator; import org.openuap.tpl.engine.TemplateContext; import org.openuap.tpl.engine.TemplateEngine; import org.springframework.web.servlet.ModelAndView; /** * <p> * 评论显示控制器 * </p> * * <p> * $Id: CommentViewAction.java 4026 2011-03-22 14:58:42Z orangeforjava $ * </p> * * @author Joseph * @version 4.0 */ public class CommentViewAction extends CommentBaseAction { private CommentManager commentManager; private TemplateEngine templateEngine; private String defaultViewName; private String defaultScreensPath; private String rsViewName; public CommentViewAction() { initDefaultViewName(); } protected void initDefaultViewName() { defaultScreensPath = "/plugin/cms/comment/screens/"; defaultViewName = defaultScreensPath + "comment_view.html"; rsViewName = defaultScreensPath + "comment_op_result.html"; } /** * 显示评论内容 调用引擎渲染内容 */ public ModelAndView perform(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { // 增加使用参数传递过来的模板 String viewName = helper.getString("tpl", defaultViewName); ModelAndView mv = new ModelAndView(viewName); // 新闻id String id = request.getParameter("id"); int p = helper.getInt("p", 1); int pp = helper.getInt("pp", 20); String flag = helper.getString("flag", ""); String order = helper.getString("order", ""); // int offset = (p - 1) * pp; String objectType = "org.openuap.cms"; QueryInfo qi = new QueryInfo("", order, pp, offset); PageBuilder pb = new PageBuilder(pp); // 决定是否发布主题帖 ICommentThread thread = commentManager.addCommentThread(new Long(id)); // List<ICommentPost> posts = commentManager.getFlatComments(id, objectType, qi, pb); pb.page(p); // 放入用户Session到模板中 model.put("userSession", this.getUserSession()); model.put("thread", thread); model.put("posts", posts); // model.put("p", p); model.put("pp", pp); model.put("pb", pb); model.put("order", order); // 采用模板引擎处理输出 try { if (PublishProfileInfoHolder.isEnableProfile()) { // PublishProfileInfoHolder.getProfile().setStartActionTime( System.currentTimeMillis()); PublishProfileInfoHolder.getProfile().setActionName("comment"); } TemplateContext context = new TemplateContext(); // System.out.println("tpl="+tpl); context.setTplName(viewName); Map finalmodel = Collections.synchronizedMap(new HashMap()); // finalmodel.put("__direct_out__", "yes"); finalmodel.putAll(model); context.setModel(finalmodel); List errors = new ArrayList(); getTemplateEngine().renderTemplate(context, errors); String content = context.getTplContent(); response.setContentType("text/html;charset=UTF-8"); // PrintWriter pw = response.getWriter(); pw.print(content); pw.flush(); pw.close(); return null; } catch (Exception e) { e.printStackTrace(); return null; } finally { if (PublishProfileInfoHolder.isEnableProfile()) { PublishProfileInfoHolder.getProfile().setStartRenderTime( System.currentTimeMillis()); PublishProfileInfoHolder.logProfile(); } } } /** * * @param request * @param response * @param helper * @param model * @return * @throws Exception */ public ModelAndView doJson(HttpServletRequest request, HttpServletResponse response, ControllerHelper helper, Map model) throws Exception { String callback=request.getParameter("jsoncallback"); model.put("jsoncallback", callback); return null; } public CommentManager getCommentManager() { return commentManager; } public void setCommentManager(CommentManager commentManager) { this.commentManager = commentManager; } public TemplateEngine getTemplateEngine() { if (templateEngine == null) { templateEngine = (TemplateEngine) ObjectLocator.lookup( "templateEngine", "org.openuap.tpl.engine"); } return templateEngine; } public void setTemplateEngine(TemplateEngine templateEngine) { this.templateEngine = templateEngine; } }