对于:“如何让所有的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不是很复杂。

不知道是否有其它更好的方法和方案?希望大家不吝赐教!^_^


...全文
107 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
软猫克鲁 2004-09-17
我觉得你的TestBean应该只存放数据库中的相关内容。页面上的一些其他数据还是应该在自己的ActionForm中。
那样会比较合理。
回复
slimexp 2004-09-17
顶呀~!
回复
BillyW 2004-09-05
用:
org.apache.struts.action.DynaActionForm
回复
rainHan 2004-09-05
我对这不太懂,顶啊!
回复
YYSAM 2004-09-05
顶者给分,不够在加!~
回复
YYSAM 2004-09-03
org.apache.struts.action.DynaActionForm

这个动态form 依然要在struct-config。xml里配置呀!
而且,他的使用多少有点违背了Struts的初衷,如下:

在Struts1.1 中,Struts引入了DynaActionForm和Dyna Bean,试图解决这个问题,在我看来,DynaActionForm的引入,破坏了对网页存取对象化的概念,使开发人员重新回到了使用HashTable、Map、Collection、ArrayList等集合对象来实现对数据进行存取的老路上来。虽然应用程序的灵活性大大增加了,但是代码的可读性也大大降低了,开发人员之间的交流难度也增加了。
回复
fmzbj 2004-09-03
用这个org.apache.struts.action.DynaActionForm就行了。
回复
yangzuyu12 2004-09-03
ip
回复
YYSAM 2004-09-03
原文如下:

如何让所有的Action只共享一个actionFrom,也就是说我只要创建一个actionFrom,让所有的action都用此actionFrom。
我在开发过程中发现,如果一个前台JSP新增了一个字段,那么就要在actionFrom里面新增些字段的seter和geter方法。
我现在想如果actionFrom的seter和geter方法都用一个,在调用时,把调用的值压到HashMap里面去。请问哪位高手有做过这样的actionFrom,前台的属性设置是如何,actionFrom又是如何写,还是action是如何取到值的。

原文地址:

http://community.csdn.net/Expert/topic/3322/3322922.xml?temp=.781399
回复
YYSAM 2004-09-03
这位兄弟,这里不讨论java本质的问题!
如果你想讨论这个问题,我可以在非技术区给你开一个帖子,你随便讨论。
回复
lzzqqq 2004-09-03
Java根本就是一堆垃圾!!
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-03 05:08
社区公告
暂无公告