背景:
从本期的电子杂志内容介绍中,大家已经看到了web发展的整个历史,
Struts 自从 2001 6月1.0 Release之后经历了漫长的春秋,有着庞大的用户群体, 并且IBM, Tomcat Web控制台都采用了Struts Framework..
web框架有好多种选择,并不一定要使用Struts, 但如果你正刚开始使用的话,希望下面的一些实践能给你带来帮助, 仅此而已. 所以,请原谅,本文没有什么实例代码, 因为今天早上,我的好友Leemassn 跟我说,这东西已经烂掉了 ,所以相信基本用法你们了解的比我多,也并没有涉及到一些高级用法, 我下面所说的内容, 也均属纸上谈兵.
1. 正确是导向,才是使用Web Framework的真正目的.
并不时因为Struts 耳儒目染的多了,我们才一定要使用Struts ,并不时MVC就一定要使用Struts ,当你能灵活游刃于StrutsActionForm ,Action ,Lib之间, "疏能跑马,密不透风" 而且能够扩展的你的Web 框架时,之后才是我们运用框架的真正灵便之处.
先说一些与Struts 无关的话题,因为Struts并不能取代你应用框架的全部,无论项目大或小,复杂或者简单
一些建议:
1. 请选用支持广泛的JDO 或者Hibernate,或者iBates,来做你的数据持久层,
2. 请加入Struts-el标签,
3. 请选用应用服务器的JNDI连接数据库
4. 请使用StrutsTestCase做单元测试
5. 请阅读sun 的命名规范.
1.Struts 之对象使用篇
Struts 版本换了好多了,,如果你只是使用最基本的Form,Action相信0.5 就够了,但眼下大家用的都是1.1吧
每写个应用都用继承BaseAction ,和BaseForm , 当然BaseAction 最好是继承LookupDispatchAction, BaseForm 最好是继承ValidatorActionForm (这两个都是从1.1开始有的)
ValidatorActionForm也是继承ActionForm , 因为1.1有了PlugIn,当你使用ValidatorPlugIn使得你的FormBean具备了验证能力啦.
(1.1 也同时 DynaActionForm ,相信大家都知道这个Bean,但它似乎除了让你少写一些ActionForm之外没什么用处,除非你是想完全不给予ActionForm,这样偶尔用到ActionForm的时候也可以小用一把DynaActionForm, 看来Struts对自己的ActionForm似乎没有多信息,欲弃欲留,我们都知道ActionForm 是不能完全充当Model(Model已应该是你的持久层)的,那我们至少可以用它来传值吧,方便支出就是不需要 一个个表单内容去get ,再set了.所以,我们有必要使用ActionForm , 同时我们也要对每个属性进行用户端的输入校验,于是我们选用ValidatorActionForm.)
LookupDispatchAction 继承DispatchAction, 自己多加两个方法,就是getKeyMethod(),localMap ,它能帮你 从本地submit的资源文件,比如submite 的名字是add 就能找到你的add方法.
2.Struts 之标签库篇.
相信Struts是很讲究复用的
标签库主要还是用做View的,所以,在设计ActionForm的时候大可大胆设计,别担心他们不能在jsp页面上很好的显示, 该是Data类型就是,也可以使用List,Map ,这样的符合类型,也可以是引用对象类型,因为他们能很方便的在页面上显示
如果Test1Form包含了 各种Model对象,
Test1Form{
Student student //有id,name等属性
Teach teach //有id, classid等属性
List classes //一组Classes 对象 Classes又含有 classid等属性
Test2Form test2form --- //有 attr2 等property
....
}
那么
<html:form action="/test1">
<bean:define name="test1Form" property="test2Form" id="test2"
type="com.yourcompony.Test2Form" />
<html:text name="test2" property="test2.attr2" />
<html: text name="studentsid" property="student.id">
<html: text name="techname" property="teach.name">
<html: text name="classid" property="classes[0].classid">
</html:form >
看到了,它们其实什么都能得到,发挥你的想象标签库能展示你的任何对象属性值.
记得在ActionForm reset里初始化一下,并且依次得到对象.这样你同样能把这些内容全部递交给ActionServlet. 如果没使用过这些,赶紧试试吧.
尽量使用EL标签: 主要用于复杂的逻辑判断,
举个例子 <logic:present name="yourForm" property="a"> 判断了a是否存在,但你又想知道a 是否等于1,怎么样头痛了吧,换成el 那就是 <c:if test='${yourForm.a =="1" }'> ....</c:if>
补充一些:对于前台的显示,,Struts标签不得不说是似乎已经成了一