JFinal源碼解析--render

1. JFinal類java

    private void initRender() {
        RenderFactory renderFactory = RenderFactory.me();//工廠設計模式、單例
        renderFactory.init(constants, servletContext);
    }

2.RenderFactory類json

設置編碼格式、開發者模式、Render工廠(支持JSP、FreeMarker、Velocity三視圖模式設計模式

採用了工廠設計模式、單例設計模式,工廠模式方便咱們在controller中,使用renderXxx 方法將text json object等類型,包裝成Render對象,以單例模式保存着這個Render對象,同時在初始化後保存着咱們選用的視圖模式IMainRenderFactory,以及servletContextthis

  public void init(Constants constants, ServletContext servletContext) {
        this.constants = constants;//咱們的配置
        RenderFactory.servletContext = servletContext;
        
        // init Render
        Render.init(constants.getEncoding(), constants.getDevMode());//設置編碼格式和開發者模式
        initFreeMarkerRender(servletContext);
        initVelocityRender(servletContext);
        initFileRender(servletContext);
        
        // create mainRenderFactory
        if (mainRenderFactory == null) {
            ViewType defaultViewType = constants.getViewType();//根據咱們的配置選擇所需用用到的Render工廠
            if (defaultViewType == ViewType.FREE_MARKER)
                mainRenderFactory = new FreeMarkerRenderFactory();
            else if (defaultViewType == ViewType.JSP)
                mainRenderFactory = new JspRenderFactory();
            else if (defaultViewType == ViewType.VELOCITY)
                mainRenderFactory = new VelocityRenderFactory();
            else
                throw new RuntimeException("View Type can not be null.");
        }
        
        // create errorRenderFactory
        if (errorRenderFactory == null) {
            errorRenderFactory = new ErrorRenderFactory();
        }
    }
相關文章
相關標籤/搜索