Java+freemarker生成HTML模板页

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值