Package org.jrest4guice.rest.writer.renderer

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

package org.jrest4guice.rest.writer.renderer;

import java.io.OutputStream;
import java.io.StringWriter;

import javax.servlet.http.HttpServletRequest;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.jrest4guice.rest.ServiceResult;
import org.jrest4guice.rest.annotations.PageFlow;
import org.jrest4guice.rest.writer.HtmlResponseWriter;

import com.google.inject.Inject;

/**
* Velocity的渲染器
* @author <a href="mailto:zhangyouqun@gmail.com">cnoss (QQ:86895156)</a>
*/
public class VelocityViewRender implements ViewRender {
  @Inject
  private HttpServletRequest request;
  @Inject
  private VelocityContext context;

  /* (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 {
    String url = annotation.success().value();
    Boolean inChain = result.isInChain();
    if((inChain==null || !inChain) &&(result.getErrorType() != null || result.getInvalidValues() != null)){
      url = annotation.error().value();
    }
    //获取模板
    Template template = Velocity.getTemplate(url, "utf-8");
    //往上下文中填入数据
    context.put("ctxPath", this.request.getContextPath());
    context.put("ctx", result);
    context.put("xctx",request.getSession().getAttribute(HtmlResponseWriter.OPTION_KEY));
    //输出到用户端
    StringWriter writer = new StringWriter();
    template.merge(context, writer);
    String content = writer.toString();
    out.write(content.getBytes());
  }

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

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

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

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.