在我写的框架中,我用一个中央控制器来控制所有的URL请求,然后将请求转发,这里就有一个问题,就是前台提交的Form表单并没有直接提交给处理的模块,而是先提交给了中央控制器,由中央控制器来转发给相应的模块,所以我的做法是使用中央控制器将所有的Form表单数据存放在一个叫做FormBean的类中封装起来,然后将这个类以对象的形式存放到request范围呢,然后将request对象提交给处理模块,模块通过得到FormBean这个对象来得到From表单的数据。
所以首先需要解决的问题就是如何动态的将Form表单的数据封装到FormBean中,因为中央控制器并不知道Form表单中都有那些数据域,也不知道FormBean中都有哪些属性,所有的这一切,都应该是动态执行的,对所有的FormBean都适用的。
我已经不完美的解决的这个问题,说不完美是因为FormBean的属性需要是public的,否则的话无法成功set进去,还需要进一步解决一下。这里给出代码:
{
try{
Class ClassName=Class.forName(ClassPath);
Field ClassField[]=ClassName.getDeclaredFields();
Object ClassInstance=ClassName.newInstance();
for(int i=0;i<ClassField.length;i++)
{
String Property=ClassField[i].getName();
ClassField[i].set(ClassInstance, req.getParameter(Property));
}
return ClassInstance;
}catch(Exception e)
{
e.printStackTrace();
}
return null;
}
有些地方需要解释一下:这里是一个函数进行处理,传递进去的参数有FormBean的类名,当然需要包括包名,如"beans.entity.User",还有一个参数是request对象,用来得到form表单的数据,这里要注意,form表单的数据域名字必须和FormBean的属性名字相同,否则set方法将会出错。
其他的没有什么需要解释的了,核心代码只有一句,也比较容易理解,这里我不能理解的是如果调用的是set方法,为什么属性不是public不行呢?还在进一步研究中。
为什么不在config.xml中设置一个属性对应于要使用的formbean呢?或许我说的与你指的不一致
@sunshineyxp 回复sunshineyxp, 不是一回事,我已经知道是需要使用哪一个FormBean了,但是并不知道这个FormBean都有哪些属性