分类: Java
2005-10-26 14:43:56
下面的文字是我做SearchCorporation的感受
EA図的SearchCorporationコントローラ
规定了页面动作的去向,由本图可以在struts-config.xml中定义action动作
对应于与searchcorportio的form就应该如下定义
上面分别定义了action和form
Struts是通过form来传输数据的,在struts-config.xml中声明了form-bean就定义了数据的载体
打开SearchCorporationForm.java我们可以看到
private String shortName;
private String fullName;
private List corporationList;
private String radio;
private String forwardOk;
private String forwardCancel;
private String forwardNodata;
上面的变量定义是什么意思?
对照SearchCorporation.jsp我们不难发现,关联数据的Html元素就是在SearchCorporationForm.java中定义了,也就是说,我们通过SearchCorporationForm.java中对jsp页面的Html控制元素的定义就可以把jsp和java文件对应起来,这样就实现了数据和页面的分离。在jsp页面中不会牵扯到数据的处理,在java文件中也仅仅需要考虑数据的处理,在form文件中我们对应于每一个元素分别定义了一个get和set方法分别用来获取和设置数据。
好了,现在我们知道了SearchCorporationForm.java的作用了。定义了form文件并且要在struts-config.xml中声明。
Struts的动作就是依托form的。如果说form定义了数据传输的实体,那么struts就是方向盘,他考虑了jsp所有的走向,分别定义了每一个动作的流程。
看EA图我们知道,画面有5个动作
1, 初始化
2, 检索处理返回记录集
3, 察看单条记录
4, 没有检索到数据
5, 退出画面
可以看到struts的5个动作在SearchCorporationAction.java中都得到了体现,分别对应action中的5个方法来处理
1, Start()
2, Filter()
3, Ok()
4, noData()
5, cancel()
在action中我们通过一个haspmap来把struts中的动作和action中的方法映射。
我们看到在SearchCorporationPost这个动作中他是一个中间动作,画面初始化以后,用户在text框中输入条件,检索处理就是filter(),选定列表的一条记录点ok就是ok()动作了,检索不出来结果(应该说检索的结果为空,这是不会让人误解的说法)就是nodata()动作,退出动作就是cancel()
而nodata()和cancel()最终都回到SearchCorporationNoValidate,为什么呢?两个者需要做的事情是相同的,要求页面没有任何数据,清空session和form回到初始画面。开始新的查询。所以这样两个动作就汇流到一个动作。那么为什么又要分成两个动作呢?显然两个动作的产生原因是不同的,为了逻辑的区分,是有必要使用两个方法来出来的。
对于调用cancel方法之前,情况很多,shortname,fullname,radio,corporationlist都会有两种可能(true 或者 false)
对于调用nodata()方法之前就比较很明确,shortname,fullname,是肯定已经设置了初值,corporationlist有返回值但是为空,radio是初始状态。
下图是EA的解图,直观的显示了action和form的关系,