/**
* 普通的写法,如:
* <tb:code type="CODE_DevJobGrade" name="criterionForm" required="true" property="criterions.jobGrade" elementWidth="150" value="0"/>
* <tb:code type="CODE_DevJobGrade" name="criterionForm" required="true" property="criterions.jobGrade" elementWidth="150" value="0"/>
* 其中的两个 property="criterions.jobGrade" 会被struct解释为属性criterions的字符串JobGrade数组。<br/>
* 但是有些时候会需要解释为criterions的数组,值保持到criterion[0]的jobGrade属性中.
* so here it is.
* @param form
* @param request
* @return
* @author hite
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws InstantiationException
* @throws SecurityException
* @throws IllegalArgumentException
* @date 2009-12-21下午02:16:03
* @since 1.0.0
*/
public static boolean lazyPopulateForm(ActionForm form, HttpServletRequest request) throws IllegalArgumentException, SecurityException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException{
//先循环反射,再循环变量
//HiteFix 应该做出迭代的
HashMap args = new HashMap();
for (Enumeration e = request.getParameterNames();e.hasMoreElements();){
String key = (String)e.nextElement();
String[] keys =key.split("\\.");
if (keys.length>1) {
if (args.containsKey(keys[0])) {
List kv = (List) args.get(keys[0]);
kv.add(keys[1]);
args.put(keys[0],kv);
} else {
List kv = new ArrayList();
kv.add(keys[1]);
args.put(keys[0],kv);
}
}
}
Class c=form.getClass();
Field []fs=c.getDeclaredFields();
for(int i=0;i<fs.length;i++){
Field f=fs[i];
String voArrayName = f.getName();
if(args.containsKey(voArrayName)){
f.setAccessible(true);
Class type = f.get(form).getClass();
if(type.isArray()){
List subArgs = (List)args.get(voArrayName);
if(subArgs.size()>0){
Class componentType = type.getComponentType();
String[] values = request.getParameterValues(voArrayName+"."+subArgs.get(0).toString());
//VO Array
Object[] filledArray = (Object[])Array.newInstance(componentType, values.length);
//TODO to VO
for (int k = 0; k < filledArray.length; k++) {
Object singleVO = filledArray[k];
if (singleVO == null) {
singleVO = componentType.getConstructor(null).newInstance(null);
}
Field[] svFields = singleVO.getClass().getDeclaredFields();
for (int j = 0; j < svFields.length; j++) {
Field svField = svFields[j];
String svFieldName = svField.getName();
if (subArgs.contains(svFieldName)) {
svField.setAccessible(true);
Method method;
String currentArgValue = request.getParameterValues(voArrayName + "." + svFieldName)[k];
if (currentArgValue.length()>0) {//not fill if null or empty
try {
Object svFieldValue = svField.get(singleVO);
if (svFieldValue == null) {
method = svField.getType().getMethod("getInstance", new Class[] { java.lang.String.class });
svFieldValue = method.invoke(singleVO, currentArgValue);
}
if (svFieldValue instanceof CodeType) {
svField.set(singleVO, svFieldValue);
}
} catch (NoSuchMethodException e2) {
if (svField.getType() == java.lang.String.class) {
svField.set(singleVO, currentArgValue);
} else if (svField.getType() == java.lang.Long.class) {
svField.set(singleVO, Long.parseLong(currentArgValue));
}
}
}
}
}
//finish filling a piece of vo
filledArray[k] = singleVO;
}
//finish filling a group of VOs
f.set(form, filledArray);
}
}
}
}
return false;
}
1. 目前做的只适合两级如
" property = 'criterion.grade' "
2. 参数也只有2个是servlet的,打算以后重构
3. 里面只考虑到有线的自定义类型和string别的没加
4. 代码意思,基本上可以看 变量命名就能看懂。
分享到:
相关推荐
它颠覆了我们对于懒惰的传统看法,提出懒惰在一定意义上能够成为推动人类进步的重要力量。这种观点不仅对我们的日常生活有深远影响,而且对于教育和培训领域也提供了全新的视角。 传统观念中,懒惰往往被视作消极的...
标题中的“懒惰的窗口”可能是指一个软件或者应用程序,可能是专门为提高用户工作效率而设计的。这个软件可能具有自动化任务、批量处理、定时执行等功能,从而帮助用户减轻工作负担,节省时间,让用户能够更“懒惰”...
Julia包懒惰地表示填充有单个条目的矩阵,以及标识矩阵。 这个包导出以下类型: Eye , Fill , Ones , Zeros , Trues和Falses 。 该软件包的主要目的是提供一种构造矩阵的统一方法。 例如,要构建全零的5 ...
### 远离懒惰——学习狼的精神 在自然界中,狼是一种充满智慧与坚韧精神的生物,它们在恶劣环境中生存并繁衍后代的能力令人钦佩。本文将通过狼的生存哲学来探讨“远离懒惰”的重要性,并进一步阐述如何通过学习狼的...
《一种新型多标记懒惰学习算法》探讨的主题是机器学习领域的一个重要分支——多标记学习。多标记学习是指一个样本可以同时属于多个类别的情况,这与传统的二分类或多分类问题有所不同。在这种学习环境中,每个样本...
### 20多岁,不要再懒惰 —— 深度解析及应对策略 #### 一、懒惰表现与成因分析 ##### (一)懒惰基因:三分钟热度 **1. 表现** - **兴趣广泛,缺乏专注**:这类人往往拥有众多兴趣爱好,但在每个领域都无法深耕...
我终于战胜了懒惰250.doc
在机器学习领域,"懒惰学习"是一种策略,其中模型不会尝试去记住训练数据,而是保存数据并延迟学习直到预测阶段。"K近邻"(K-Nearest Neighbor,简称KNN)是懒惰学习的一个典型代表。KNN算法基于实例的学习,用于...
大班体育游戏小公鸡和懒惰虫.doc
大班社会优秀教案《懒惰虫和勤快人》润新教育.txt
综上所述,《懒惰的智慧》这一议题挑战了我们对于懒惰的传统看法,揭示了懒惰作为一种积极心态在推动个人和社会进步中的重要作用。人类社会的发展离不开对舒适和效率的追求,而懒惰正是这一追求的动力源泉。我们应该...
懒惰怎么办.doc
易语言懒惰的窗口源码,懒惰的窗口,下落窗口,取窗口信息索引,GetForegroundWindow,MoveWindow,GetWindowRect,GetSystemMetrics
基于java的开发源码-懒惰者代码生成器 IdlerCodeGenerator.zip 基于java的开发源码-懒惰者代码生成器 IdlerCodeGenerator.zip 基于java的开发源码-懒惰者代码生成器 IdlerCodeGenerator.zip 基于java的开发源码-懒惰...
标题和描述中提到的"Health_ Laziness 健康:懒惰.pdf"是一份讨论健康与懒惰关系的文档,可能包含关于懒惰对身体和生活的影响、懒惰的行为表现以及如何克服懒惰的建议等内容。虽然标签部分为空,但我们可以从部分...
然而,随着对科技的依赖日益加深,一个问题逐渐浮出水面:科技真的会让人变得懒惰吗?这个问题涉及了科技对人类行为习惯、思维模式以及劳动态度的深刻影响,值得我们深入探讨和思考。 首先,我们必须承认科技带来的...
总之,通过懒惰编译和动态导入,我们可以显著提升Webpack的启动时间,特别是对于大型项目或者有大量动态加载需求的应用来说,这种优化策略显得尤为重要。`lazy-compile-webpack-plugin-master`这样的插件则提供了更...
大班音乐优质课教案《勤快人和懒惰人》润新教育.txt
在当代社会,懒惰似乎是许多人的通病,它像一层无形的网,使人们在不知不觉中陷入无尽的舒适区,从而失去了前进的动力和追求目标的勇气。而今,我们通过三篇深刻揭示懒惰本质的作文,窥见了作者与懒惰这一顽疾斗争的...
《懒惰者代码生成器:IdlerCodeGenerator的探索与应用》 在编程领域,效率是程序员们追求的重要目标之一。面对重复性的工作,如何快速有效地完成任务,成为了许多开发者关注的问题。"懒惰者代码生成器...