|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
在1995年5月23日以“Java”的名称正式发布了。数据在Strust中,我们大概常常要在ActionForm中利用其他JavaBean作为属性范例,这里就存在着怎样利用好这些属性与HTMLForm之间的数据互换,上面我们就这些成绩做一解说。
如在用户注册界面中,我们一般会将用户的接洽体例构成一个独自的新的Class,如Contact,包括以上司性:德律风(tel),手机(cell),Email(email),QQ(qq),通讯地点(adress)等等,如许层次也对照明晰,以下是这个ActionForm的部分代码:
publicclassRegisterFormextendsActionForm
{
privateIntegerid;
privateStringlogonName;
privateStringrealName;
privateContactcontact=newContact();
………..
}
在这里我们必要将Contact实例化(在reset函数中必要从头实例化),这次要由于Struts的机制:如我们将HTML的Form元素(如email)值传给ActionForm,Struts必要实行的操纵是getContact().setEmail(Stringemail),假如这时候前往的contact对象为空的话,那末赋值怎样举行,并且Struts也不会晓得怎样往实例化Contact,偶然这些JavaBean的范例有多是接口,实例化更是未知,以是关于JavaBean范例在ActionForm中的实例化,你必要自行完成,并且必需完成。至于在实践操纵中判别JavaBean是不是被举行过相干操纵(不再是初始形态),你必要自行判别,实在也很复杂,如可在Contact类中编写一个函数查验一下便可。
ActionForm创立终了后,我们必要在JspForm中援用这些JavaBean范例的属性值,那就很复杂啦,只需接纳“Form的属性称号”+“.”+“JavaBean中的属性称号”布局组成的称号付给相干元素便可。如:
<html:textproperty="contact.email"/>
经由过程这类体例我们就能够处置好ActionForm中的JavaBean范例的属性值了。
实践的情形大概更庞大些,我们偶然大概要提交多行数据到前进,并且行内的数据是相干的,如我们必要提交多个用户的接洽体例,这些行内的数据,如email,德律风,手机,这些数据都是和用户编码相干的,如今我们修正一下Contact类,增加一个用户编码(userId)属性,这时候我们构建的ActionForm中大概必要一个列表数据(List)范例来处置这类情形。以下是这个ActionForm的部分代码:
publicclassModifyBatchContactFormextendsActionForm
{
privateListcontact=newAutoArrayList(Contact.class);
…..
}
在以上代码中,我们一样处置了List范例数据的初始化。Struts在给List中的对象赋值时,固然必要先猎取List数据,然后在猎取List中某一个对象(经由过程Index),最初给对象赋值。在这里想我们能够更具体点剖析扫瞄器端传过去数据,字段值情势以下:contact[0].email=linux_china@hotmail.com,Struts猎取ActionForm中的List数据后,经由过程Index(此时为0)来猎取List中封装的JavaBean对象,但是此时List是空的(只管初始化了,可是没无数据),是没法获得封装的对象的,因而我们要在Struts猎取List中封装的对象的时分给它创立一个,如许就包管对象的猎取和赋值的乐成举行,一切我们新建一个AutoArrayList类,承继ArrayList,只需重写get(intindex)办法便可,实在很复杂,代码以下:
publicclassAutoArrayListextendsArrayList{
privateClassitemClass;
publicAutoArrayList(ClassitemClass){
this.itemClass=itemClass;
}
publicObjectget(intindex){
try{
while(index>=size()){
add(itemClass.newInstance());
}
}catch(Exceptione){
e.printStackTrace();
}
returnsuper.get(index);
}
}
如许我们就完成能够多行数据提交的ActionForm计划,这里另有点提示,假如从扫瞄器端传过去的行索引是腾跃是的,如短少两头行,而你不想要这些数据的话,且首尾行index相差很年夜的话,这类体例大概不太合适。这类多行提交情势对照合适对流动行的数据处置。假如行数不流动的话,你能够参考利用MapForm体例完成。
上面我们就看看怎样在Jsp中利用这个ActionForm,实在只必要实行一个轮回便可:
<logic:iterateid="contact"name="FormName"property="contact"indexId="index">
<html:textname="contact"property="userId"indexed="true"/>
<html:textname="contact"property="email"indexed="true"/>
</logic:iterate>
这里我们再解说一下,代码中呈现的“contact”(白色)都是ActionForm中的List数据范例变量称号,请确保分歧,请不要变动称号,这也是便利提交到背景的数据吸收。“FormName”为在struts-config中声明的ActionForm称号。indexed="true"能够确保天生的html元素的称号独一,不要短少这个声明。以上的Jsp代码,你也能够利用JSTL来完成,就看你习气怎样了。
经由过程以上步骤,我们完成了多行数据的提交一切环节,如许Struts就会完成其他一切的事变,我们的代码逻辑和完成也复杂多了。
总结:经由过程以上两个例子,相以信对ActionForm中利用JavaBean和List范例数据不会再生疏,同时利用Map范例,如许可创立更好的ActionForm计划,关于MapForm,请参考http://www.jetmaven.net/documents/j_mapformInStruts.php。不外引进这类体例后,在Validator方面你大概要花点头脑啦(如经由过程XDoclet天生Validator文件大概功效不全),大概你必要手写一些代码来完成相干事情。
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。 |
|