// resultValue 有两种可能:
// 1.一种直接是字面量(比如 dispatcher:/xxx.html)
// 2.另一种是 json 参数(比如 dispatcher:{'location': '/xxx.html'} )
ResultTypeConfig typeConfig = resultTypes.get(resultType);
//如果没有默认参数
if (Strings.isNullOrEmpty(typeConfig.getDefaultResultParam())) {
ResultConfig.Builder resultBuilder = createResultConfigFromResultType(resultCode, typeConfig);
// 只有返回类型, 例如是 "json"
if (resultCode.length() == resultType.length()) {
return resultBuilder.build();
}
//或者 ":" 后面有 json 参数
if (resultCode.indexOf(":") == resultType.length()) {
String resultParam = resultCode.substring(resultType.length() + 1);
addParamByJSON(resultBuilder, resultParam);
return resultBuilder.build();
}
}
//如果有默认参数
else {
// 如果是 "type:" 这种形式
if (resultCode.indexOf(":") == resultType.length()) {
ResultConfig.Builder resultBuilder = createResultConfigFromResultType(resultCode, typeConfig);
// 拿到参数部分(":" 后面的部分)
String resultParam = resultCode.substring(resultType.length() + 1);
String location = null; // 通常是 defaultParam
if (isJSONObject(resultParam)) { //判断是否是 json 格式
/**
* 如果是 json 形式传递 param(并非 struts json 插件)的返回结果,
* 如果有 location ,也需要进行路径相对路径或绝对路径转换
*/
Map<String, String> params = addParamByJSON(resultBuilder, resultParam);
location = params.get(typeConfig.getDefaultResultParam());
} else {
location = resultParam;
}
// 页面路径的转换如果是相对路径, 但除过重定向
if(!resultType.equals("redirect")){
location = parsePath(contentBase, routeMapping, location);
}
resultBuilder.addParam(typeConfig.getDefaultResultParam(), location);
return resultBuilder.build();
}
}
return null;