Webx Json输出源码
2016-07-11 14:50
435 查看
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(); }
相关文章推荐
- ubuntu 安装json库
- JSP乱码问题
- 一个基于Extjs 3的支持单元格合并的面板
- js中return的作用
- SharePoint 2013 树形导航菜单,读取指定文档库下的文件夹和文件(非JS部分)
- js笔记--错误处理与调试
- js正则表达式判断数字范围
- [JQ权威指南]全局函数getJSON()实现异步获取数据
- Javascript数组操作详细解答
- Js判断键盘按键
- Three.js(4)Light
- xStream完美转换XML、JSON
- JavaScript 数组详解以及常用方法
- JavaScript对象的理解 及 字面量对象与数组的关系
- JS函数调用的四种方法
- JavaScript从父页面获取子页面的值(子页面又如何访问父页面)
- JavaScript类型判断instanceof与typeof对比
- JavaScript学习笔记十八:标准对象-Date
- JSP学习笔记(一)
- js 判断某个对象是不是dom对象