对于表单的验证我们可以使用如下两种方式来进行,下面展示几个代码片段来说明这个问题:
方式一、使用validate方法:
代码实例:
public class SampleEAction extends BasicCRUTSupportAction implements Preparable{
//code .....
public void validate() {
if(StringUtils.isBlank(dataField)){
this.addFieldError("name", getText("sample.name.toolong")); //错误信息
}
}
public String save() throws Exception{
this.validate();
//do your business
return SUCCESS;
}
//other code....
}
当然我们需要在action的定义中进行如下的配置信息,表示在验证失败的情况下视图转向到input(/sample/form/editInfo.jsp):
引用
<result name="input">/sample/form/editInfo.jsp</result>
在页面中我们可以使用如下的标签来显示出具体的错误信息:
<s:fielderror><s:param>name</s:param></s:fielderror>
这里需要注意的一个地方就是如果我们的验证是根据不同的方法定制的话,也就是说验证发生在validate方法之外:
public String save() throws Exception{
this.validate(); //pass
this.doAnotherValidate(); //unpass
this.doOtherValidate(); //unpass
//这里需要做出如下的判断来选择视图的专向
if(!this.getFieldErrors().isEmpty()){
return INPUT;
}
}
方式二、使用配置文件ActionName-validation.xml
文件推荐放置在action的class所在位置,内容基本如下,可根据规则自行扩展
引用
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
<validators>
<!-- Field-Validator Syntax -->
<field name="dataInfo.name">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message key="sample.name.required"/>
</field-validator>
</field>
</validators>
Notice: 使用这种形式的时候,当表单验证失败的情况下页面中即使没有出现标签<s:fielderror><s:param>name</s:param></s:fielderror>,错误信息也会被
打印出来,看来struts2的确很强大.但可以好像显示的位置不大好控制……