Package com.freewebsys.blog.template

Source Code of com.freewebsys.blog.template.PostListDirective

package com.freewebsys.blog.template;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;

import com.freewebsys.blog.common.GlobalConf;
import com.freewebsys.blog.dao.BaseDao;
import com.freewebsys.blog.pojo.Post;

import freemarker.core.Environment;
import freemarker.template.Template;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;

/**
* 使用自定义 模板 <@PostList limit=10 type=all page=true> ${status.isLast}
* ${status.index}....${post.id} .. ${post.title} </@PostList>
*/
public class PostListDirective implements TemplateDirectiveModel {

  // 数据库查询dao。
  private BaseDao baseDao;
  // 生成分页的时候使用的模板.
  private Template temp;

  public PostListDirective(Template temp, BaseDao baseDao) {
    super();
    this.baseDao = baseDao;
    this.temp = temp;
  }

  public void execute(Environment env, Map params, TemplateModel[] model,
      TemplateDirectiveBody body) throws TemplateException, IOException {
    int limit = 10;// 默认10条记录.
    try {// 会有异常
      limit = Integer.parseInt(params.get("limit").toString());
    } catch (Exception e) {
    }
    boolean page = false;// 默认不分页.
    try {// 会有异常
      page = Boolean.parseBoolean(params.get("page").toString());
    } catch (Exception e) {
    }

    if (!page) {// 如果不分页.查询 limit
      String hql = " from Post post where post.status = 1 order by post.createDate desc ";
      List<Post> postList = baseDao.findByMaxResults(limit, hql);
      IteratorStatus.StatusState state = new IteratorStatus.StatusState();

      for (int i = 0; i < postList.size(); i++) {
        Post post = postList.get(i);
        if (i == (postList.size() - 1)) {// 设置最后一页.
          state.setLast(true);
        }
        // 设置变量
        env.setVariable("status",
            DEFAULT_WRAPPER.wrap(new IteratorStatus(state)));
        env.setVariable("post", DEFAULT_WRAPPER.wrap(post));
        body.render(env.getOut());
        // 迭代器往后.
        state.next();

        String prevUrl = null;
        String nextUrl = null;
        if (i != 0) {
          // 前一个url.
          Post postTemp = postList.get(i - 1);
          prevUrl = postTemp.getUrl();
        }
        if (i != (postList.size() - 1)) {
          // 后一个url.
          Post postTemp = postList.get(i + 1);
          nextUrl = postTemp.getUrl();
        }
        Map<String, Object> rootPost = new HashMap<String, Object>();
        rootPost.put("prevUrl", prevUrl);
        rootPost.put("nextUrl", nextUrl);
        // 使用自定义模板postList
        rootPost.put("post", post);
        rootPost.put("DateParse", new DateParseDirective());
        rootPost.put("blogPath", GlobalConf.BLOG_PATH);

        // 生成每一个文章.
        CommonTemplateService.genPostByTemplate(rootPost);
      }
    }

  }

  public BaseDao getBaseDao() {
    return baseDao;
  }

  public void setBaseDao(BaseDao baseDao) {
    this.baseDao = baseDao;
  }

}
TOP

Related Classes of com.freewebsys.blog.template.PostListDirective

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.