現有一項目使用的Spring webwork 框架 數據庫使用jdbc 現在前端有數據 。大概60個字段的數據 ,pojo裡有此對象
現在需要前端傳值到後台 希望可以action 可以接受 對象(不想傳輸/接收60個字段那樣pojo裡的對象就沒有意義了)請問使用什麼方式才能傳過來對象呢 ! 求助各位大神 新手好痛苦 補充一下前端使用的EXTJS2
使用映射,主要就是方法映射,只要傳過來的字段和你的pojo對象裡面的字段一樣,就可以set這個字段。/**
package com.jfinal.core;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.ActiveRecordException;
import com.jfinal.plugin.activerecord.Model;
import com.jfinal.plugin.activerecord.Table;
import com.jfinal.plugin.activerecord.TableMapping;
/**
ModelInjector
*/
final class ModelInjector {
@SuppressWarnings("unchecked")
public static T inject(Class<?> modelClass, HttpServletRequest request, boolean skipConvertError) {
String modelName = modelClass.getSimpleName();
return (T)inject(modelClass, StrKit.firstCharToLowerCase(modelName), request, skipConvertError);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public static final T inject(Class<?> modelClass, String modelName, HttpServletRequest request, boolean skipConvertError) {
Object model = null;
try {
model = modelClass.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
if (model instanceof Model)
injectActiveRecordModel((Model)model, modelName, request, skipConvertError);
else
injectCommonModel(model, modelName, request, modelClass, skipConvertError);
return (T)model;
}
private static final void injectCommonModel(Object model, String modelName, HttpServletRequest request, Class<?> modelClass, boolean skipConvertError) {
Method[] methods = modelClass.getMethods();
for (Method method : methods) {
String methodName = method.getName();
if (methodName.startsWith("set") == false) // only setter method
continue;
Class<?>[] types = method.getParameterTypes();
if (types.length != 1) // only one parameter
continue;
String attrName = methodName.substring(3);
String value = request.getParameter(modelName + "." + StrKit.firstCharToLowerCase(attrName));
if (value != null) {
try {
method.invoke(model, TypeConverter.convert(types[0], value));
} catch (Exception e) {
if (skipConvertError == false)
throw new RuntimeException(e);
}
}
}
}
@SuppressWarnings("rawtypes")
private static final void injectActiveRecordModel(Model<?> model, String modelName, HttpServletRequest request, boolean skipConvertError) {
Table table = TableMapping.me().getTable(model.getClass());
String modelNameAndDot = modelName + ".";
Map<String, String[]> parasMap = request.getParameterMap();
for (Entry<String, String[]> e : parasMap.entrySet()) {
String paraKey = e.getKey();
if (paraKey.startsWith(modelNameAndDot)) {
String paraName = paraKey.substring(modelNameAndDot.length());
Class colType = table.getColumnType(paraName);
if (colType == null)
throw new ActiveRecordException("The model attribute " + paraKey + " is not exists.");
String[] paraValue = e.getValue();
try {
// Object value = Converter.convert(colType, paraValue != null ? paraValue[0] : null);
Object value = paraValue[0] != null ? TypeConverter.convert(colType, paraValue[0]) : null;
model.set(paraName, value);
} catch (Exception ex) {
if (skipConvertError == false)
throw new RuntimeException("Can not convert parameter: " + modelNameAndDot + paraName, ex);
}
}
}
}
}