Injector.injectModel无法取到数组

@SuppressWarnings("unchecked")
	public static <T> T injectModel(Class<T> modelClass, String modelName, HttpServletRequest request, boolean skipConvertError) {
		Object temp = createInstance(modelClass);
		if (temp instanceof Model == false) {
			throw new IllegalArgumentException("getModel only support class of Model, using getBean for other class.");
		}
		
		Model<?> model = (Model<?>)temp;
		Table table = TableMapping.me().getTable(model.getClass());
		if (table == null) {
			throw new ActiveRecordException("The Table mapping of model: " + modelClass.getName() + 
					" not exists or the ActiveRecordPlugin not start.");
		}
		
		String modelNameAndDot = StrKit.notBlank(modelName) ? modelName + "." : null;
		Map<String, String[]> parasMap = request.getParameterMap();
		TypeConverter converter = TypeConverter.me();
		// 对 paraMap进行遍历而不是对table.getColumnTypeMapEntrySet()进行遍历,以便支持 CaseInsensitiveContainerFactory
		// 以及支持界面的 attrName有误时可以感知并抛出异常避免出错
		for (Entry<String, String[]> entry : parasMap.entrySet()) {
			String paraName = entry.getKey();
			String attrName;
			if (modelNameAndDot != null) {
				if (paraName.startsWith(modelNameAndDot)) {
					attrName = paraName.substring(modelNameAndDot.length());
				} else {
					continue ;
				}
			} else {
				attrName = paraName;
			}
			
			Class<?> colType = table.getColumnType(attrName);
			if (colType == null) {
				if (skipConvertError) {
					continue ;
				} else {
					throw new ActiveRecordException("The model attribute " + attrName + " is not exists.");
				}
			}
			
			try {
				String[] paraValueArray = entry.getValue();
				String paraValue = (paraValueArray != null && paraValueArray.length > 0) ? paraValueArray[0] : null;
				
				Object value = paraValue != null ? converter.convert(colType, paraValue) : null;
				model.set(attrName, value);
			} catch (Exception e) {
				if (skipConvertError == false) {
					throw new RuntimeException("Can not convert parameter: " + paraName, e);
				}
			}
		}
		
		return (T)model;
	}

image.png

评论区

JFinal

2024-11-18 14:49

先用一下 json 注入,这个注入数组非常方便,或者暂时换种方式,暂时不用数组

form 表单的一个字段传递数组这种方式本来就用得少

北流家园网

2024-11-18 20:01

@JFinal 不少哦,checkbox还 是很常见的。如果使用Json注入?

JFinal

2024-11-18 20:20

@北流家园网 在 baseController 覆盖一下 getModel 系列的方法,支持一下这个数组的注入

injectModel 回调了 getModel 方法,很方便扩展

热门反馈

扫码入社