Struts 1.x 的不足,导致开发过程为了迁就Struts而变得繁杂

1. ActionForm这个鸡肋的东西。validate方法的确可以校验form,但是一旦校验失败了,要返回input page的时候,大部分时候input page要能正确显示需要一些object(一般是绑定在request上的),为了满足这个要求,要在form中调用显示input page的那个bean,得到相关的object,然后validate方法才能返回ActionErrors。而且很多HTML控件,比如select,在ActionForm中就要用非常麻烦的数据结构,如字符串数组,collection等。 

2. Struts的标签库和很多机制对支持“多选项”、“多选择”、“多参数”的时候很麻烦。比如:(1)一个非常简单的要在一个URL上增加多个参数的功能,用JSP写非常简单,第一个参数用?,后面的参数用&即可。但是使用Struts的<html:link>会非常的麻烦,为了要多个参数,可能要预先准备一个collection,太麻烦了。不用这个<html:link>的话吧,也麻烦,因为这个标签支持action属性,用JSP写还要拼URL,而且如果是多module的Struts应用,拼URL都没用(2)form中支持多选的select,要用Struts的标签库的话也非常的麻烦。 

3. <html:button>居然不支持action,非常的麻烦 

4. 多module,也是一个非常鸡肋的东西。要在多个module之间切换或是互相调用其中的action,一定要用Struts的SwitchModule,要不就要定义forward。这给很多地方带来了很多麻烦,比如Ajax,要生成一个请求的URL,如果是多module的情况,就非常的麻烦,只能用SwitchModule,但是这个SwitchModule又不能在URL后面带参数,太麻烦了!用forward也不现实,很多地方都要手动拼URL来访问,比如单击一个按钮的时候,触发javascript,但是javascript拼出来的URL访问,无法进入Struts的module。非常的麻烦。 

5. logic:iterate标签在循环体内,不能取出当前的循环变量的值,从而不能在这个循环体内做很多额外的操作,这就是为什么很多时候界面上的东西要在后台的实体bean中专门开一个字段出来存放,就是为了在logic:iterate中可以直接引用这个字段,实际上,这种字段不应该存在在后台,因为这完全是为了界面而设置的一个字段,在后台数据库或后台程序中根本就没有这个字段。这种代码就应该存在于JSP中,但是由于logic:iterate的不灵活导致了上述的问题。 

6. html:check标签居然没有一个CHECKED的属性。要手动选中一个checkbox要写javascript
posted @ 2011-01-11 22:11  super119  阅读(223)  评论(0编辑  收藏  举报