对于:“如何让所有的Action只共享一个actionFrom” 帖子的追加讨论,进来者给分!
YYSAM 2004-09-03 05:08:37 想留言给你,但是服务器一直忙~没办法,只好重发一封帖子,希望大家讨论!找到更好的方法!
对于:sagittarius1979(花开花落 流水无声)
你所说的这种方法在jsp与form交换的时候确实很好。简洁,可以让你不必去过多关心参数的反射,赋值问题。使form更加好理解。
jsp中如:
<html:text property="data(name)" />
<html:text property="data(password)" />
actionform 中
public DataForm extends ActionForm {
Map data = new HashMap();
public void setData(Map data) {this.data = data; }
public Map getData() {return this.data; }
public Object getVal(String key) {
return data.get(key);
}
}
action中
public testAction extends Action {
public ActionForward execute(....) {
String name = (String)((DataForm)form).get("name");
String password = (String)((DataForm)form).get("password");
....
}
}
但是你发现没有,这种方法put进去的都是对象类型的。这样感觉对于数据库字段的映射有点模糊……。另外在validation。xml里面验证的话也有一些麻烦,遭遇不同表同名的字段就更不好办了。
而且,在过多的jsp映射这个form的时候,可能需要其它的参数!不是表单提交的参数,这样在form里面难免会做赋值,验证或者判断等零散的操作。这样越堆越多,会不会是form不利于阅读和修改呢?
我原来是用这种方法的:
jsp中如:
<html:text property="TestBean.name"/>
<html:text property="TextBean.password/>
actionform 中
public DataForm extends ActionForm {
TestBean testBean= new TestBean();
public void setTestBean(TestBean testBean) {this.testBean= testBean; }
public TestBean getTestBean() {return this.testBean; }
}
action中
public testAction extends Action {
public ActionForward execute(....) {
TestBean testBean=(DataForm)form.getTestBean();
....
}
}
TestBean:
public class TestBean {
private String name;
private String password;
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public void setName(String string) {
name = string;
}
public void setPassword(String string) {
password = string;
}
}
在前一步操作中,用java的类反射机制从数据库中取出数据填充到TestBean中。
在后一步操作中,传TestBean到相应的函数和方法里面执行相应的操作。
这样就实现了整个操作流程。
我在作开发的时候,不是全部都用一个form,而是一个大的模块用一个form,基本保证form不是很复杂。
不知道是否有其它更好的方法和方案?希望大家不吝赐教!^_^