Webx Json输出源码

来源:互联网 发布:手机淘宝2016旧版本 编辑:程序博客网 时间:2024/05/14 09:14

Pipeline.xml

                 <when>                    <!-- 创建JSON,无模板,无layout。 -->                    <pl-conditions:target-extension-condition extension="json" />                    <pl-valves:performScreen />                    <pl-valves:renderResultAsJson />                </when>

PerformScreenValue

 public void invoke(PipelineContext pipelineContext) throws Exception {        TurbineRunData rundata = getTurbineRunData(request);        // 检查重定向标志,如果是重定向,则不需要将页面输出。        if (!rundata.isRedirected()) {            setContentType(rundata);            Object result = null;            try {                result = performScreenModule(rundata);            } finally {                setOutputValue(pipelineContext, result);            }        }        pipelineContext.invokeNext();    }    /** 执行screen模块。 */    protected Object performScreenModule(TurbineRunData rundata) {        ModuleFinder finder = new ModuleFinder(rundata.getTarget());        // 如果设置了template,则默认打开layout        rundata.setLayoutEnabled(true);        try {            Module module = finder.getScreenModule();            // 当指定了templateName时,可以没有的screen module,而单单渲染模板。            // 这样就实现了page-driven,即先写模板,必要时再写一个module class与之对应。            if (module != null) {                // 将event传入screen。                ScreenEventUtil.setEventName(rundata.getRequest(), finder.event);                try {                    if (module instanceof ModuleReturningValue) {                        return ((ModuleReturningValue) module).executeAndReturn();                    } else {                        module.execute();                    }                } finally {                    ScreenEventUtil.setEventName(rundata.getRequest(), null);                }            } else {                if (isScreenModuleRequired()) {                    throw new ModuleNotFoundException("Could not find screen module: " + finder.moduleName);                }            }        } catch (ModuleLoaderException e) {            throw new WebxException("Failed to load screen module: " + finder.moduleName, e);        } catch (Exception e) {            throw new WebxException("Failed to execute screen: " + finder.moduleName, e);        }        return null;    }

RenderResultAsJsonValve

public void invoke(PipelineContext pipelineContext) throws Exception {        TurbineRunData rundata = getTurbineRunData(request);        if (!rundata.isRedirected()) {            Object resultObject = consumeInputValue(pipelineContext);            if (resultObject == null) {                return;            }            String javascriptVariable = getJavascriptVariable();            boolean outputAsJson = javascriptVariable == null;            if (outputAsJson) {                // output as json                response.setContentType(getContentType());            } else {                // output as javascript                response.setContentType(getJavascriptContentType());            }            PrintWriter out = response.getWriter();            String jsonResult = JSON.toJSONString(resultObject);            if (outputAsJson) {                out.print(jsonResult);            } else {                out.print("var ");                out.print(javascriptVariable);                out.print(" = ");                out.print(jsonResult);                out.print(";");            }        }        pipelineContext.invokeNext();    }
0 0
原创粉丝点击