Package org.jrest4guice.rest.writer.renderer

Source Code of org.jrest4guice.rest.writer.renderer.FreemarkerViewRender

package org.jrest4guice.rest.writer.renderer;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.jrest4guice.rest.ServiceResult;
import org.jrest4guice.rest.annotations.PageFlow;
import org.jrest4guice.rest.writer.HtmlResponseWriter;

import com.google.inject.Inject;

import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;

/**
* Freemarker的渲染器
* @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
*/
public class FreemarkerViewRender implements ViewRender {
  private static Configuration cfg;

  @Inject
  protected HttpSession session;
 
  /**
   * 初始化Freemarker的配置
   */
  private void initFreemarker() {
    if (cfg == null) {
      try {
        cfg = new Configuration();
        cfg.setDirectoryForTemplateLoading(new File(this.session
            .getServletContext().getRealPath("/")));
        cfg.setObjectWrapper(new DefaultObjectWrapper());
      } catch (IOException e) {
        throw new RuntimeException("初始化Freemarker引擎失败", e);
      }
    }
  }
 
  /* (non-Javadoc)
   * @see org.jrest4guice.rest.render.ViewRender#render(java.io.OutputStream, org.jrest4guice.rest.annotations.PageFlow, org.jrest4guice.rest.ServiceResult)
   */
  @Override
  public void render(OutputStream out, PageFlow annotation, ServiceResult result,String charset)
      throws Exception {

    this.initFreemarker();
    //获取模板
    Template template = cfg.getTemplate(annotation.success().value(), "utf-8");
    StringWriter writer = new StringWriter();
    //往上下文中填入数据
    Map context = new HashMap();
    context.put("ctx", result);
    context.put("xctx",session.getAttribute(HtmlResponseWriter.OPTION_KEY));
    template.process(context, writer);

    //输出到用户端
    writer.toString();
    out.write(writer.toString().getBytes());
  }

  /* (non-Javadoc)
   * @see org.jrest4guice.rest.render.ViewRender#getRenderType()
   */
  @Override
  public String getRenderType() {
    return ResultType.FREEMARKER;
  }

  @Override
  public String getRenderTypeShortName() {
    return ".ftl";
  }
}
TOP

Related Classes of org.jrest4guice.rest.writer.renderer.FreemarkerViewRender

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.