博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
让JFinal的Controller的getModel方法支持不加前缀的变量名,方便extjs等使用
阅读量:6286 次
发布时间:2019-06-22

本文共 4382 字,大约阅读时间需要 14 分钟。

  hot3.png

此实现需要修改JFinal源代码,目前该代码实现已经提交给JFinal了,估计下一个版本会添加该功能。想提前用的,自己修改代码重新编译jfinal吧。

修改 com.jfinal.core包下的ModelInjector.java 文件,(替换全部内容)

/** * Copyright (c) 2011-2015, James Zhan 詹波 (jfinal@126.com). * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */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(); //当modelName为null或者“”时,不添加前缀 String modelNameAndDot = ""; if(StrKit.notBlank(modelName)){ modelNameAndDot= modelName + "."; } 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(modelNameAndDot + 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) { //当modelName为null或者“”时,不添加前缀 String modelNameAndDot = ""; if(StrKit.notBlank(modelName)){ modelNameAndDot= modelName + "."; } Table table = TableMapping.me().getTable(model.getClass()); Map
> columnTypeMap = table.getColumnTypeMap(); Map
 parasMap = request.getParameterMap(); //逐个遍历表字段 for(Entry
> entry: columnTypeMap.entrySet()){ String key = modelNameAndDot + entry.getKey(); //request中设定了相应的属性 if(parasMap.containsKey(key)){ Class colType = entry.getValue(); String[] paraValue = parasMap.get(key); try { // Object value = Converter.convert(colType, paraValue != null ? paraValue[0] : null); Object value = paraValue[0] != null ? TypeConverter.convert(colType, paraValue[0]) : null; model.set(entry.getKey(), value); } catch (Exception ex) { if (skipConvertError == false) throw new RuntimeException("Can not convert parameter: " + key, ex); } } } }}

如何使用:

getModel(Model.class,"")

第二个参数为空时,表示获取不加前缀的属性值,部位空时获取相应前缀的属性值。

假定User.class 有 username,password两个属性。

比如getModel(User.class,""),将获取username,password属性。

getModel(User.class,"user"),将获取user.username,user.password属性。

转载于:https://my.oschina.net/myaniu/blog/470041

你可能感兴趣的文章
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
点石成金:“硅业报国”不仅是理念
查看>>
联络中心演化的四个特征
查看>>
《SQL与关系数据库理论——如何编写健壮的SQL代码》》一1.4 原始模型回顾
查看>>
云数据中心UPS供电系统需具备的特性
查看>>
低碳出行下的新宠儿:多方通信下的云视频会议
查看>>
京东发布物联网战略 将推出智子万家升级体验计划
查看>>
昆明:“互联网+政务”助推智慧城市建设
查看>>
soapUI的Mocservice仿真测试问题
查看>>
DBImport v3.44 中文版发布:数据库数据互导及文档生成工具(IT人员必备)
查看>>
说说SDN和云平台对接
查看>>
物联网给中国智造插上翅膀
查看>>
51Testing专访史亮:测试人员在国外
查看>>
“黑科技”安防界遍地开花 公安实战如何应用?
查看>>
《C++编程规范:101条规则、准则与最佳实践》——2.9 确保资源为对象所拥有。使用显式的RAII和智能指针...
查看>>
《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 2.1 简介
查看>>
《SOA达人迷》目录—导读
查看>>
Apache Kylin权威指南1.5 Apache Kylin的主要特点
查看>>