五、数据的处理
两个框架都抛弃了Struts1.x中那种需要借助ActionFrom来处理数据的机制,而采用更为先进的注入方式。EasyJWeb中的WebForm中提供了一个toPo方法,用来处理数据注入。
比如,为了在Action中注入Person对象:
EasyJWeb的Action代码中直接使用toPo方法手动注入,如:
private PersonService service;
public void setService(PersonService service)
...{
this.service=service;
}
public void save(WebForm form) ...{
Person person=form.toPo(Person.class);
this.service.save(person);
page("list");
}
}
对应的表单是普通的html表示,如下所示:
<input type="text" id="id" name="id" cssStyle="display:none"/>
<input type="text" id="firstName" label="First Name" name="firstName"/>
<input type="text" id="lastName" label="Last Name" name="lastName"/>
</form>
Struts2中则不需要写代码,只需要把要注入的数据在Action中准备好即可,如:
private PersonService service;
private Person person;
public PersonAction(PersonService service) ...{
this.service = service;
}
public String execute() ...{
//this.persons = service.findAll();
return Action.SUCCESS;
}
public String save() ...{
this.service.save(person);
this.person = new Person();
return execute();
}
public Person getPerson() ...{
return person;
}
public void setPerson(Person person) ...{
this.person = person;
}
}
对应的表单如下所示:
<s:textfield id="id" name="person.id" cssStyle="display:none"/>
<s:textfield id="firstName" label="First Name" name="person.firstName"/>
<s:textfield id="lastName" label="Last Name" name="person.lastName"/>
</s:form>
当然,Struts2关于数据转换方面提供了很多可供选择,比如也可以实现ModelDriven接口提供getModel来按指定的规则注入模型数据。
对于关联对像的加载及注入,比如Person中的Department属性,EasyJWeb只需要在属性上加上一个@POLoad标签即可,而struts2则不能。
六、其它
1、验证处理
EasyJWeb提供了一个基于注解标签实现的灵活框架,可以直接在要验证的数据对象(一般是模型对象)中直接添加验证标签来实现验证,另外在Action中加入自定义的验证内容也非常容易,只需要使用addError方法即可。当前EasyJWeb-1.0m3只支持通过注解的方式验证。
Struts2的验证框架结合了Strut1.x及webwork,可以直接使用验证标签来标注验证,也可以使用xml文件来配置验证规则及验证目标对象。
EasyJWeb的验证标签:
@Validator(name=”string”,value=”blank;trim;required;min:5;max:10;minMsg:最少不能少于5个字符;maxMsg:最大不能超过10字符”)
更多参考:http://www.easyjf.org/html/20070822/12867758-1954570.htm
Struts2的验证配置,
<field-validator type="stringlength">
<param name="maxLength">4</param>
<param name="minLength">2</param>
<param name="trim">true</param>
<message><![CDATA[ must be a String of a specific greater than 1 less than 5 if specified ]]></message>
</field-validator>
</field>