package com.aggrepoint.winlet.jsp.site.taglib; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.TagSupport; import com.aggrepoint.winlet.ContextUtils; import com.aggrepoint.winlet.LogInfoImpl; import com.aggrepoint.winlet.ReqInfo; /** * 调用Handler,将Handler放在Model中的数据放入Request * * @author Jiangming Yang (yangjm@gmail.com) */ public class RunHandlerTag extends TagSupport { static final long serialVersionUID = 0; String url; public void setUrl(String url) { this.url = url; } public int doStartTag() throws JspException { try { HttpServletRequest req = (HttpServletRequest) pageContext .getRequest(); LogInfoImpl log = ContextUtils.getLogInfo(req); ReqInfo reqInfo = ContextUtils.getReqInfo(); try { Map<String, Object> model = ContextUtils .getDispatcher(req) .runHandler( req, (HttpServletResponse) pageContext.getResponse(), reqInfo.getPageUrl(), url); for (String key : model.keySet()) req.setAttribute(key, model.get(key)); } finally { // 恢复当前请求的ReqInfo ContextUtils.setReqInfo(reqInfo); // 恢复当前请求的LogInfo ContextUtils.setLogInfo(req, log); } } catch (RuntimeException e) { throw e; } catch (Exception e) { e.printStackTrace(); throw new JspException(e.getMessage()); } return SKIP_BODY; } }