您的位置:首页 > Web前端 > JavaScript

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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: