use of org.eweb4j.mvc.interceptor.After in project eweb4j-framework by laiweiwei.
the class ActionExecution method execute.
/**
* 执行Action
*
* @throws Exception
*/
public void execute() throws Exception {
// 实例化pojo
initPojo();
// IOC注入对象到pojo中
injectIocBean();
String methodName = this.context.getActionConfigBean().getMethod();
Method[] methods = ru.getMethods(methodName);
if (methods == null || methods.length == 0)
return;
method = this.getFirstMethd(methods);
if (method == null)
return;
// Consumes cons = method.getAnnotation(Consumes.class);
boolean hasConsumes = JAXWSUtil.hasConsumes(method);
if (hasConsumes) {
String[] cts = ConsumesUtil.getConsumesValue(method);
for (String ct : cts) {
if ("json".equals(ct) || MIMEType.JSON.equals(ct)) {
String[] jss = this.context.getQueryParamMap().get("_json_data_");
if (jss != null) {
for (String json : jss) {
Map<String, Object> map;
try {
map = CommonUtil.parse(json, Map.class);
} catch (Exception e) {
e.printStackTrace();
break;
}
for (Iterator<Entry<String, Object>> it = map.entrySet().iterator(); it.hasNext(); ) {
Entry<String, Object> e = it.next();
String key = e.getKey();
String val = String.valueOf(e.getValue());
//继续解析,如果解析成功说明是多级的json格式,最后将其平展开来
try {
Map<String, Object> subMap = CommonUtil.parse(val, Map.class);
for (Iterator<Entry<String, Object>> subIt = subMap.entrySet().iterator(); subIt.hasNext(); ) {
Entry<String, Object> subE = subIt.next();
String subKey = subE.getKey();
String subVal = String.valueOf(subE.getValue());
String newKey = key + "." + subKey;
try {
Map<String, Object> subSubMap = CommonUtil.parse(subVal, Map.class);
for (Iterator<Entry<String, Object>> subSubIt = subSubMap.entrySet().iterator(); subSubIt.hasNext(); ) {
Entry<String, Object> subSubE = subSubIt.next();
String subSubKey = subSubE.getKey();
String subSubVal = String.valueOf(subSubE.getValue());
String newSubKey = newKey + "." + subSubKey;
assemJsonData(newSubKey, subSubVal);
}
} catch (Exception ex2) {
assemJsonData(newKey, subVal);
}
}
} catch (Exception ex) {
assemJsonData(key, val);
}
}
}
}
}
}
}
// 注入框架mvc action 上下文环境
this.injectActionCxt2Pojo(this.ru);
// if (IAction.class.isAssignableFrom(this.actionObject.getClass())) {
// // struts2风格
// IAction action = (IAction) actionObject;
// action.init(this.context);
// retn = action.execute();
// // 对Action执行返回结果的处理
// this.handleResult();
//
// return ;
// }
// 执行验证器
this.handleValidator();
try {
// 注入mvc action 请求参数
ParamUtil.injectParam(this.context, this.ru, null);
/* 方法体内的前置拦截器执行 */
Before before = method.getAnnotation(Before.class);
if (before != null) {
InterExecution before_interExe = new InterExecution("before", context);
before_interExe.execute(before.value());
if (before_interExe.getError() != null) {
before_interExe.showErr();
return;
}
}
// execute the action method
excuteMethod(methodName);
/* 方法体内的后置拦截器执行 */
After after = method.getAnnotation(After.class);
if (after != null) {
// 后置拦截器
InterExecution after_interExe = new InterExecution("after", context);
after_interExe.execute(after.value());
if (after_interExe.getError() != null) {
after_interExe.showErr();
return;
}
}
/* 外部配置的后置拦截器后执行 */
// 7.后置拦截器
InterExecution after_interExe = new InterExecution("after", this.context);
if (after_interExe.findAndExecuteInter()) {
after_interExe.showErr();
return;
}
// 对Action执行返回结果的处理
this.handleResult();
} catch (Exception e) {
throw e;
}
}
Aggregations