Package org.nutz.mvc.impl.processor

Source Code of org.nutz.mvc.impl.processor.ViewProcessor

package org.nutz.mvc.impl.processor;

import javax.servlet.http.HttpServletRequest;

import org.nutz.lang.Lang;
import org.nutz.lang.Strings;
import org.nutz.lang.util.Context;
import org.nutz.mvc.ActionContext;
import org.nutz.mvc.ActionInfo;
import org.nutz.mvc.NutConfig;
import org.nutz.mvc.View;
import org.nutz.mvc.ViewMaker;
import org.nutz.mvc.view.ViewWrapper;
import org.nutz.mvc.view.VoidView;

public class ViewProcessor extends AbstractProcessor {

  protected View view;
  public static final String DEFAULT_ATTRIBUTE = "obj";
 
  @Override
  public void init(NutConfig config, ActionInfo ai) throws Throwable {
    view = evalView(config, ai, ai.getOkView());
  }

  public void process(ActionContext ac) throws Throwable {
    Object re = ac.getMethodReturn();
    Object err = ac.getError();
    if (re != null && re instanceof View) {
      if (re instanceof ViewWrapper)
        putRequestAttribute(ac.getRequest(), ((ViewWrapper)re).getData());
      ((View) re).render(ac.getRequest(), ac.getResponse(), err);
    } else {
      putRequestAttribute(ac.getRequest(), null == re ? err : re);
      view.render(ac.getRequest(), ac.getResponse(), null == re ? err : re);
    }
    doNext(ac);
  }
 
  /**
   * 保存对象到attribute
   */
  public static void putRequestAttribute(HttpServletRequest req, Object re){
    if (null != re){
      if(re instanceof Context){
        Context context = (Context) re;
        for(String key : context.keys()){
          req.setAttribute(key, context.get(key));
        }
      } else {
        req.setAttribute(ViewProcessor.DEFAULT_ATTRIBUTE, re);
      }
    }
  }

  protected static View evalView(NutConfig config, ActionInfo ai, String viewType) {
    if (Strings.isBlank(viewType))
      return new VoidView();

    String str = viewType;
    int pos = str.indexOf(':');
    String type, value;
    if (pos > 0) {
      type = Strings.trim(str.substring(0, pos).toLowerCase());
      value = Strings.trim(pos >= (str.length() - 1) ? null : str.substring(pos + 1));
    } else {
      type = str;
      value = null;
    }
    for (ViewMaker maker : ai.getViewMakers()) {
      View view = maker.make(config.getIoc(), type, value);
      if (null != view)
        return view;
    }
    throw Lang.makeThrow("Can not eval %s(\"%s\") View for %s", viewType, str, ai.getMethod());
  }
}
TOP

Related Classes of org.nutz.mvc.impl.processor.ViewProcessor

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.