Java+freemarker生成HTML模板页

来源:互联网 发布:java 图片合成pdf 编辑:程序博客网 时间:2024/05/02 06:10

Java+freemarker生成HTML模板页

需求有多个样式板式结构不一样模板页:用户选择自己喜欢的样式结构页面,然后就渲染出改html页面。不选择就显示默认的样式结构HTML页面

package com.school.web.controller;import java.io.BufferedReader;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.io.Reader;import java.io.StringReader;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.ServletRequestUtils;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.view.RedirectView;import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import com.school.business.CategoryManager;import com.school.business.CourseInstructorManager;import com.school.business.CourseManager;import com.school.domain.Category;import com.school.domain.CourseBean;import com.school.domain.LiveCourse;import com.school.domain.User;import com.school.util.PageRequest;import com.school.util.Pageable;import com.school.util.Paginator;import com.school.util.SystemMailConfig;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;/** * 课程浏览查询的控制器。 */@Controller@RequestMapping("/course/explore")public class ExploreCourseController extends AbstractController {    @Autowired    private CourseManager courseManager;    @Autowired    private CategoryManager categoryManager;        @Autowired    private CourseInstructorManager courseInstructorManager;        @Autowired    private FreeMarkerConfigurer freeMarkerConfigurer;    /**     * 浏览所有课程。     */    @RequestMapping    public ModelAndView index(HttpServletRequest request,HttpServletResponse response) {        return this.doResponse(null, request,response);    }    /**     * 根据分类ID浏览课程。     */    @RequestMapping("/{categoryId}")    public ModelAndView explore(@PathVariable String categoryId, HttpServletRequest request,HttpServletResponse response) {        return this.doResponse(categoryId, request,response);    }    /**     * 处理请求。     */    private ModelAndView doResponse(String categoryId, HttpServletRequest request,HttpServletResponse response) {        String schoolId = this.getSchoolId(request); // 网校ID        String sort = ServletRequestUtils.getStringParameter(request, "sort", ""); // 排序方式        // 分页查询        int page = ServletRequestUtils.getIntParameter(request, "page", 1); // 第几页        Pageable pageable = new PageRequest(page, 16);        // 分页课程信息        Paginator<CourseBean> paginator = null;        if ("popular".equals(sort)) {            paginator = courseManager.getPopularCourseBeans(schoolId, categoryId, pageable);        } else if ("latest".equals(sort)) {            paginator = courseManager.getLatestCourseBeans(schoolId, categoryId, pageable);        } else if ("recommended".equals(sort)) {            paginator = courseManager.getRecommendedCourseBeans(schoolId, categoryId, pageable);        } else { // 默认按热门课程排序            sort = "popular";            paginator = courseManager.getPopularCourseBeans(schoolId, categoryId, pageable);        }                //创建者、教师        if(paginator.getContents().size()>0){            for(int i=0;i<paginator.getContents().size();i++){                String courseId=paginator.getContents().get(i).getCourseId();                List<User> instructor=courseInstructorManager.getInstructors(schoolId, courseId);                if(instructor.size()>0){                    paginator.getContents().get(i).setUserId(instructor.get(0).getUserId());                    paginator.getContents().get(i).setCreatorNickname(instructor.get(0).getNickname());                    paginator.getContents().get(i).setCreatorAvatar(instructor.get(0).getAvatar());                }            }        }        // 课程分类        List<Category> categories = categoryManager.getCategories(schoolId);                String categoryName = "";   //当前课程分类名称        if(null != categories){            for(Category category : categories){                if(category.getCategoryId().equals(categoryId)){                    categoryName = category.getName();                }            }        }        categoryName = categoryName.trim().length()==0 ? "全部":categoryName;          boolean test=false;        if(test){            // 渲染FreeMarker模版用到的数据模型            //参数列表            Map<String, Object> rootMap = new HashMap<String, Object>();            rootMap.put("schoolId", schoolId);            rootMap.put("currentUser", this.getCurrentUser(request));            rootMap.put("sort", sort);            rootMap.put("categoryId", categoryId);            rootMap.put("categories", categories);            rootMap.put("categoryName", categoryName);                        // 分页代码            String queryString = "sort=" + sort;            rootMap.put("paginator", paginator);            rootMap.put("paginationHtml", paginator.toPaginationHtml(queryString));            rootMap.put("totalCourse", paginator.getTotalItems());            // 处理模版            PrintWriter out = null;            String templateName = "explore";//模板页的标记名称            Configuration cfg = freeMarkerConfigurer.getConfiguration();            String templateSource="";            InputStream inStream = null;            try {                inStream = SystemMailConfig.class.getResourceAsStream("/explore.ftl");                ByteArrayOutputStream outStream = new ByteArrayOutputStream();                byte[] data = new byte[4096];                int count = -1;                while ((count = inStream.read(data, 0, 4096)) != -1) {                    outStream.write(data, 0, count);                }                templateSource = outStream.toString("UTF-8");            } catch (Exception e) {                logger.error("读取忘记密码邮件模板时发生异常,Cause: ", e);            } finally {                if (null != inStream) {                    try {                        inStream.close();                    } catch (IOException e) {                    }                }            }                        logger.info("测试代码:{}",templateSource);            Reader reader = new StringReader(templateSource);            try {                out = response.getWriter();                Template template = new Template(templateName, reader, cfg, "UTF-8");                template.process(rootMap, out, new DefaultObjectWrapper());//动态加载模板            } catch (Exception e) {                logger.error("处理网校自定义首页模版出错,templateId=" + templateName, e);                return new ModelAndView(new RedirectView("/school?from=home")); // 使用默认首页            } finally {                if (null != out) {                    out.close();                }            }            return null;        }else{                        // 页面模版            ModelAndView mav = this.createModelAndView(request);            mav.setViewName(getFrontViewDir(request) + "/course/explore");            mav.addObject("sort", sort);            mav.addObject("categoryId", categoryId);            mav.addObject("categories", categories);            mav.addObject("categoryName", categoryName);                        // 分页代码            String queryString = "sort=" + sort;            mav.addObject("paginator", paginator);            mav.addObject("paginationHtml", paginator.toPaginationHtml(queryString));            mav.addObject("totalCourse", paginator.getTotalItems());            return mav;        }    }}


0 0
原创粉丝点击