package org.nutz.mvc; import java.lang.reflect.Method; import java.util.List; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.nutz.ioc.Ioc; import org.nutz.lang.util.SimpleContext; /** * Action执行的上下文 * @author wendal(wendal1985@gmail.com) * @author zozoh(zozohtnt@gmail.com) * */ public class ActionContext extends SimpleContext { private static final String PATH = "nutz.mvc.path"; private static final String PATH_ARGS = "nutz.mvc.pathArgs"; private static final String REQUEST = HttpServletRequest.class.getName(); private static final String RESPONSE = HttpServletResponse.class.getName(); private static final String SERVLET_CONTEXT = ServletContext.class.getName(); private static final String MODULE = "nutz.mvc.module"; private static final String METHOD = "nutz.mvc.method"; private static final String METHOD_ARGS = "nutz.mvc.method.args"; private static final String METHOD_RETURN = "nutz.mvc.method.return"; private static final String ERROR = "nutz.mvc.error"; public static final String AC_DONE = "nutz.mvc.done"; /** * 获取全局的Ioc对象 * @return 如果定义了IocBy注解,则肯定返回非空对象 */ public Ioc getIoc() { return Mvcs.getIoc(); } /** * 获取异常对象 */ public Throwable getError() { return this.getAs(Throwable.class, ERROR); } /** * 设置异常对象,一般由ActionChain捕捉到异常后调用 * @param error 异常对象 * @return 当前上下文,即被调用者本身 */ public ActionContext setError(Throwable error) { this.set(ERROR, error); return this; } /** * 获取当前请求的path,经过去后缀处理 * @return 当前请求的path,经过去后缀处理 */ public String getPath() { return this.getString(PATH); } /** * 设置当前请求的path,经过去后缀处理 * @param ph 请求的path,,经过去后缀处理 * @return 当前上下文,即被调用者本身 */ public ActionContext setPath(String ph) { this.set(PATH, ph); return this; } /** * 获取路径参数 * @return 路径参数 */ @SuppressWarnings("unchecked") public List<String> getPathArgs() { return this.getAs(List.class, PATH_ARGS); } public ActionContext setPathArgs(List<String> args) { this.set(PATH_ARGS, args); return this; } /** * 获取这个Action对应的Method */ public Method getMethod() { return this.getAs(Method.class, METHOD); } /** * 设置这个Action对应的Method * @param m 这个Action对应的Method * @return 当前上下文,即被调用者本身 */ public ActionContext setMethod(Method m) { this.set(METHOD, m); return this; } /** * 获取将要执行Method的对象 * @return 执行对象,即模块类的实例 */ public Object getModule() { return this.get(MODULE); } public ActionContext setModule(Object obj) { this.set(MODULE, obj); return this; } /** * 获取将要执行Method的参数 * @return method的参数 */ public Object[] getMethodArgs() { return this.getAs(Object[].class, METHOD_ARGS); } public ActionContext setMethodArgs(Object[] args) { this.set(METHOD_ARGS, args); return this; } /** * 获取method返回值 */ public Object getMethodReturn() { return this.get(METHOD_RETURN); } public ActionContext setMethodReturn(Object re) { this.set(METHOD_RETURN, re); return this; } /** * 获取请求的HttpServletRequest * @return 请求的HttpServletRequest */ public HttpServletRequest getRequest() { return this.getAs(HttpServletRequest.class, REQUEST); } public ActionContext setRequest(HttpServletRequest req) { this.set(REQUEST, req); return this; } /** * 获取请求的HttpServletResponse * @return 请求的HttpServletResponse */ public HttpServletResponse getResponse() { return this.getAs(HttpServletResponse.class, RESPONSE); } public ActionContext setResponse(HttpServletResponse resp) { this.set(RESPONSE, resp); return this; } /** * 获取ServletContext * @return ServletContext */ public ServletContext getServletContext() { return this.getAs(ServletContext.class, SERVLET_CONTEXT); } public ActionContext setServletContext(ServletContext sc) { this.set(SERVLET_CONTEXT, sc); return this; } public String toString() { return getInnerMap().toString(); } }