Struts中引入ActionForm类的意义与缺陷:
在Struts应用程序中,ActionForm是一个很重要的概念,它的主要功能就是为Action的操作提供与客户表单相映射的数据(如果在客户指定的情况下,还包括对数据进行校验)。Action根据业务逻辑的需要,对数据状态进行修改,在改变系统状态后,ActionForm则自动的回写新的数据状态并保持。程序员对JSP与ActionForm Bean的对应关系,通常感到很迷惑,JSP与ActionForm到底是1:1,还是N:1,对此,Struts本身对此并没有提出自己的观点。无论是一对一,还是多对一,Struts本身并不关心,它都能很好得工作。Struts在它的开发文档中指出,对于较小规模的开发,开发人员可以根据自己的需要,每个模块只写一个ActionForm Bean,甚至整个应用程序只写一个ActionForm Bean.当然,Struts也不反对每个ActionForm Bean只对应一个JSP,他们之间的对应关系,由开发人员自己决定。
在我看来,正如Entity EJB对J2EE的重大贡献一样,Entity EJB使得程序员对二维关系数据库的存取对象化了,程序员可以使用Set 或者Get等面向对象的方法来操纵关系数据库的数据,而ActionForm也使得程序员对网页的数据存取奇迹般的对象化了,程序员同样也可以使用Set 或者Get等面向对象的方法存取网页上的数据,这是一个开发模式方式上的重大转变。基于此,我个人认为ActionForm与JSP即VIEW层的关系最好是一对一的关系,这样,在理解上会更清晰一些。但是,这样也会带来一个很现实的问题,在一个应用程序中,也许有非常多得JSP页面,如果每个ActionForm 都只对应一个JSP页面,那么系统的Java代码就会急剧膨胀起来,而且,每个ActionForm都是只有很简单的Set或者Get方法存取数据,那么,如何简化Struts应用程序的开发呢?
在Struts1.1 中,Struts引入了DynaActionForm和Dyna Bean,试图解决这个问题,在我看来,DynaActionForm的引入,破坏了对网页存取对象化的概念,使开发人员重新回到了使用HashTable、Map、Collection、ArrayList等集合对象来实现对数据进行存取的老路上来。虽然应用程序的灵活性大大增加了,但是代码的可读性也大大降低了,开发人员之间的交流难度也增加了。
在传统的应用程序对ActionForm Bean的访问中,我们通常都写成如下的形式:
在Action 的Execute方法中,我们 把这个集合用request.setAttribute("array", array)存储起来,然后在JSP页面中,我们用iterate Tag把数据循环现实出来。代码通常都是这个样子:
<logic:present name=" array " scope="request">
<logic:iterate name=" array " id=" array "
type="com.bhsky.webis.Goods">
<tr align="center">
<td class="table2">
<bean:write name=" array " property="goodsid"/>
</td>
<td class="table2">
<bean:write name=" array " property="goodsname"/>
</td>
</tr>
</logic:iterate>
</logic:present>
|
在Struts中,对数据的访问和显示的写法通常都是很固定的,在VIEW层,我们是没有办法简化自己的代码的,在Action层,其写法通常也很固定,只是做一个页面的跳转,商业逻辑和对数据得访问,通常都是放在JavaBean中。那么,在此,我提出一种运用类反射的机制,使应用程序对ActionForm Bean的赋值自动化,即应用程序通过一个简单的接口,使用一个通用的方法,就可以完成对ActionForm Bean的赋值,而不必在每个使用ActionFormBean的地方,都把数据库中的值手动赋值给ActionForm Bean,然后再在JSP页面中显示出来。虽然它不能减少ActionForm Bean的数量,但是,它至少使应用程序对ActionForm Bean的赋值自动化了,从而减少了程序出错概率,提高了程软件开发效率。
Connection conn=DriverManager.getConnection("JDBC URL ");
sql=" select * from some tables ";
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
ArrayList array=new ArrayList();
while (rs.next()) {
AActionForm actionForm =new AActionForm ();
actionForm.setId(rs.getString("Id"));
actionForm.setName(rs.getString("Name"));
array.add(actionForm);
}
|
分享到:
相关推荐
用Java反射机制简化Struts框架逻辑控制.pdf
Struts应用开发基础.doc Struts应用开发基础.doc Struts应用开发基础.doc Struts应用开发基础.doc Struts应用开发基础.doc
利用Myeclipse快速开发struts应用程序
Struts应用开发完全手册(11-15)Struts应用开发完全手册(11-15)Struts应用开发完全手册(11-15)
利用Myeclipse开发struts应用程序
struts应用开发电子书struts应用开发电子书
所发布的是资源是《Struts应用开发完全手册》书的全部源代码
jsp项目开发实录 jsp项目开发实录 Struts 实现 程序完整 Struts 实现 程序完整 Struts 实现 程序完整 Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整Struts 实现 程序完整...
Struts应用开发.ppt
利用Myeclipse快速开发struts应用程序.ppt对于初学STRUTS 的人来产有很大的帮助……
使用Struts2开发Java Web应用程序(转贴)
Struts应用开发完全手册(html标签)
本光盘是《整合Struts+Hibernate+Spring应用开发详解》一书的配书光盘,书中的代码按章存放, 即第二章所使用的代码放在codes文件夹的02文件夹下,依次类推。 本光盘根目录下有11个文件夹,其内容和含义说明如下: ...
浪曦_Struts2应用开发系列_第1讲.Struts2入门与配置_swf
浪曦_Struts2应用开发系列_源代码 浪曦_Struts2应用开发系列_源代码
Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧Struts开发技巧
NULL 博文链接:https://chaoyi.iteye.com/blog/2156733