[Form大改革]
还记得 Struts 1.x 的 Form吗?
对小弟来说那简直是噩梦一场, 因为当您的网页多了一个 Form 要填, 接下来会有这些事
1. 设计 Form Bean
2. 设计 Validation Rule
3. 增加 Action 和 Form Bean 的 mapping
4.设计 Action
Form 的数量如果在 20 个以下感觉还好, 但是当 Form 的数量高达 100 个那简直是让人疯掉
Form Bean 会多出很多脑残码, 這些程式码明明就是个定的东西卻要花掉时间
mapping 的条目不断增加导致设定档越來越大, 设定档越大越难维护
要是其他工程師看不懂, 那么下次出问题保证加班
Struts 2 大幅改善了这项缺失, 当然就是在 Form Bean 上面动手腳咯
首先 Form Bean 和 Action 合而为一, 这样一来一个 class 就搞定了
这样最大的好处是 mapping 设定值就免啦, 改程式的时候就不用走迷宮一直翻设定档
import 也少了好几行 (这个常常花掉很多时间找東西)
这样就非常符合敏捷开发的精神, 用惯例取代设定档 (convention instead of configuration)
只要你不特別写设定档, 那么 Struts 2 预设就酱子做
因为有了预设的行为, 所以一切都变得更有效率
Struts 1 虽然彻底被 Ruby on Rails, CodeIgniter 等框架打敗
但是 Struts 2 的改革让这个框架的竞争力重见光明
[随手一笔]
以下简单说明 form 和 action 之间的关系
假设有一个form 长得如此这般 (最阳春的写法)
1 <s:form> 2 <s:textfield name="username"/> 3 <s:textfield name="password"/> 4 <s:submit/> 5 </s:form>
那么当你按下submit的时候,struts2会自动帮你呼叫action里面的setUsername和setPassword方法(如果存在的话)
你只要在action里写了这两个方法,,就可以接收Form的值了
所以action的大概架构是酱子:
1 public class Login { 2 3 public void setUsername(String s) { 4 // TODO ... 5 } 6 7 public void setPassword(String s) { 8 // TODO ... 9 } 10 11 public String execute() { 12 // TODO ... 13 } 14 15 }
採用这样的设计, 大幅減少了 configuration 的赘码
也让程式不用分割过度, 造成衔接的工程师要花大量的时间玩连连看
您爽的话还可以直接把 Action 丟給 Hibernate 去存, 真是懒斃了
Struts 1.x 虽然号称长期维护很有帮助
但是个人认为, 等工程师换人这句话就结束了
Struts 2 的可读性, 敏捷开发性, 管理设定集中性都具备了