Java反射机制与struts1.1结合运用遇到的问题!

04-04-12 javaclass
在struts-config.xml中可定义动态form如下:
<form-bean name="LoginForm" type="org.apache.struts.action.DynaActionForm" dynamic="true" >
<form-property name="username" type="java.lang.String" />
<form-property name="password" type="java.lang.String" />
</form-bean>
<form-bean name="CompanyDetailForm" type="org.apache.struts.action.DynaActionForm" dynamic="true" >
<form-property name="companyName" type="java.lang.String" />
<form-property name="url" type="java.lang.String" />
<form-property name="city" type="java.lang.String" />
<form-property name="country" type="java.lang.String" />
<form-property name="phone" type="java.lang.String" />
<form-property name="email" type="java.lang.String" />
</form-bean>
同样在database中我们可以定义对应的表
table user(username, password)
table company(companyName, url, city, country, phone, email)
----------------------------------------------------------------
一般情况下在装载Form对象时通过取得rs记录后以如下形式装载:
userForm.set("username", rs.getString("username"));
.......
comForm.set("companyName", rs.getString("companyName"));
.........
----------------------------------------------------------------
请问各位大侠,在当form和表很多的情况下,如果通过java反射机制达到自动装载数据对象,良好的代码封装重用等,
万分感激!

javaclass
2004-04-12 11:01
<form-bean name="LoginForm" type="org.apache.struts.action.DynaActionForm" dynamic="true" >
  <form-property name="username" type="java.lang.String" />
  <form-property name="password" type="java.lang.String" />
</form-bean>
<form-bean name="CompanyDetailForm" type="org.apache.struts.action.DynaActionForm" dynamic="true" >
  <form-property name="companyName" type="java.lang.String" />
  <form-property name="url" type="java.lang.String" />
  <form-property name="street" type="java.lang.String" />
  <form-property name="city" type="java.lang.String" />
  <form-property name="country" type="java.lang.String" />
  <form-property name="zip" type="java.lang.String" />
  <form-property name="phone" type="java.lang.String" />
  <form-property name="email" type="java.lang.String" />
</form-bean>
<p class="indent">

banq
2004-04-12 11:30
你是想让后台的数据表和前台的struts的数据封装合二为一吗?

javaclass
2004-04-12 16:12
是的。
本来应该是让数据表与数据模型(中间层也就是JavaBean实体对象),原则上不应该让web form与数据表操作关联。但现在想简单起见,就在struts-config.xml中定义动态form,然后通过写具体sql语句查询得到rs记录集,运用java的反射机制达到set×××,get×××自动的目的。

wildfox
2004-04-20 11:54
我有一个想法,如果有什么不妥之处,请大家不吝指正

两个HashMap
nameValueMap存放属性名称(property-name)、对应数据(value)
nameTypeMap 存放属性名称(property-name)、对应类型(type 如java.lang.String)

假如有一个属性名称为("userName"),类行为"java.lang.String"从resultSet中取出值的时候,直接用rs.getObject("userName"), 放入nameValueMap中 nameValueMap.put("userName", rs.getObject("userName"));当要用到该属性的致的时候,先从nameTypeMap中取出他的类型 Class type = (Class)nameTypeMap.get("userName");然后把从nameValueType中取出的相应的值转换成该类型返回,当然要注意到NullPointerException, 当然我这样做有个缺点,就是对primitive 数据处理还需要改进

gaolong
2004-04-25 10:49
能把java的反射机制用到webserver的文件与数据库的映射之上?
谢谢回复!!!

SportsBaby1980
2004-06-10 09:34
很不错。
这段时间我也一直在做这个问题

但和javaclass老兄不太一样。

我的想法是:
数据库字段
javabean属性
form字段

三者的名字一致
这样就能使用反射进行数据操作,省了很大的力气



猜你喜欢