自定义一个MyErrorRender extends ErrorRender 如何在其中获取setAttr设置了变量?

刚刚为了做统一返回,自定义了一个

public class MyErrorRender extends ErrorRender {
	protected String msg ;
	public MyErrorRender(int errorCode, String view) {
		super(errorCode, view);
	}
	/**
	 * JFinal 的Controller限制了发挥,下面的构造方法用不上!
	 * <br>期盼以后可以用上吧
	 * @param msg
	 * @param errorCode
	 */
	public MyErrorRender(String msg, int errorCode) {
		super(errorCode, null);
		this.msg = msg;
	}

	@Override
	public void render() {
		response.setStatus(getErrorCode());	// HttpServletResponse.SC_XXX_XXX
		PrintWriter writer = null;
		try {
			if(XX.isAjax(request) && XX.isJsonRender(request)){
				
				RenderManager.me();
				RenderManager.me().getRenderFactory().getJsonRender(getErrorJson()).setContext(request, response).render();;
				return;
			}
			// render with view
			String view = getView();
			if (view != null) {
				RenderManager.me().getRenderFactory().getRender(view).setContext(request, response).render();
				return;
			}
		
			// render with html content
			response.setContentType(contentType);
	        writer = response.getWriter();
	        writer.write(getErrorHtml());
	        writer.flush();
		} catch (IOException e) {
			throw new RenderException(e);
		}
	}

	
	/**
     * 获得返回的json格式数据
     * @author WangWei
     * @created 2017-10-19 下午2:28:16
     * @return
     */
    private String getErrorJson() {
        int errorCode = super.getErrorCode();
        msg = this.msg == null?errorCode + " 系统错误":this.msg;
	    return JsonKit.toJson(Kv.by("errCode", errorCode).set("msg", msg));
    }
    
    public int getErrorCode(){
    	int myCode = super.getErrorCode();
    	ArrayList<Integer> sysCode = new ArrayList<>(Arrays.asList(201,202,203,204, 
    			301,302,303,304,305,306,
    			400,401,402,403,404,407,415,
    			500,501,502,503));
    	if(sysCode.contains(myCode)){
    		return myCode;
    	}else{
    		return 200;
    	}
    }
}

如何获取控制器的方法setAttr设置的变量值?

已解决:原来是设置了request!

评论区

JFinal

2017-10-23 10:58

感谢分享

热门反馈

扫码入社