Freemarker 静态页面的生成

时间:2022-11-13 08:37:38
1  下载freemarker 的插件导入到开发工具中的plugin中
2  编写与页面对应的  xxx.ftl文件
以下是案例
 一 . 请求的html页面
      点击不同活动,在 url 上拼接不同 id
     <p><a href="#/promotion_detail/{{item.id}}">{{item.title}}</a></p>
    对应的路由设置 
    when("/promotion_detail/:id", {
                    templateUrl: function($routeParams){
                        return "promotion_showDetail.action?id=" + $routeParams.id;
                    }
                })
二 模板 
   在WEB-INF 下穿件文件夹 freemarker_templates  编写(xxx.ftl)
   <link rel="stylesheet" type="text/css" href="css/promotion_detail.css">
<div class="container promotions" >
    <div class="col-md-2 prolist">
        <h5 class="title"><a href="#/promotion"><strong>返回促销列表</strong></a></h5>
        <img src=${promotion.titleImg} class="img-responsive">
    </div>
    <div class="col-md-10 procontent">
        <h5 class="title">${promotion.title}</h5>
        <div class="intro">
            <p>活动范围: ${promotion.activeScope}</p>
            <p>活动时间: ${promotion.startDate?string("yyyy-MM-dd")} -
                ${promotion.endDate?string("yyyy-MM-dd")}</p>
        </div>
        <div class="partline clearfix"></div>
        <div class="promotionbox">
            ${promotion.description}
        </div>
    </div>

</div>



三 : 模块代码 

 @Action(value = "promotion_showDetail")
    public String showDetail() throws Exception {
        // 先判断 id 对应html 是否存在,如果存在 直接返回
        String htmlRealPath = ServletActionContext.getServletContext()
                .getRealPath("/freemarker");
        File htmlFile = new File(htmlRealPath + "/" + model.getId() + ".html");

        // 如果html文件不存在 ,查询数据库,结合freemarker模板生成 页面
        if (!htmlFile.exists()) {
            Configuration configuration = new Configuration(
                    Configuration.VERSION_2_3_22);
            configuration.setDirectoryForTemplateLoading(new File(
                    ServletActionContext.getServletContext().getRealPath(
                            "/WEB-INF/freemarker_templates")));
            // 获取模板对象
            Template template = configuration
                    .getTemplate("promotion_detail.ftl");

            // 动态数据
            Promotion promotion = WebClient
                    .create(Constants.BOS_MANAGEMENT_URL
                            + "/bos_management/services/promotionService/promotion/"
                            + model.getId()).accept(MediaType.APPLICATION_JSON)
                    .get(Promotion.class);
            Map<String, Object> parameterMap = new HashMap<String, Object>();
            parameterMap.put("promotion", promotion);

            // 合并输出
            template.process(parameterMap, new OutputStreamWriter(
                    new FileOutputStream(htmlFile), "utf-8"));

        }

        // 存在 ,直接将文件返回
        ServletActionContext.getResponse().setContentType(
                "text/html;charset=utf-8");
        FileUtils.copyFile(htmlFile, ServletActionContext.getResponse()
                .getOutputStream());

        return NONE;
    }