本教程假设你以完成Processing Forms 课程并有Form_Processing_Struts2_Ant (or Form_Processing_Struts2_Mvn)项目,也可在Google Code -http://code.google.com/p/struts2-examples/downloads/list下载Form_Validation_Struts2_Ant或者 Form_Validation_Struts2_Mvn。 |
引言
本课学习使用Struts 2进行表单验证。有两种方法,本课使用更基本的一种,将表单验证写入Struts 2 Action类中。
添加validate方法
为了能使Struts 2 Action类能处理表单验证,必须在Action class中定义一个validate方法,在Processing Forms 中,我们知道有如下规则:
1. 用户必须提供first name
2. 用户必须提供email
3. 用户必须大于18岁
在validate方法中我们可以通过引用personBean的适当的get方法得到成员变量的值,一旦我们有值,我们便可以实现业务逻辑。.
在Register.java 中加入以下方法
public void validate(){ if ( personBean.getFirstName().length() == 0 ){ addFieldError( "personBean.firstName", "First name is required." ); } if ( personBean.getEmail().length() == 0 ){ addFieldError( "personBean.email", "Email is required." ); } if ( personBean.getAge() < 18 ){ addFieldError( "personBean.age", "Age is required and must be 18 or older" ); } }
当用户提交之后,Struts 2 会将用户输入转换成personBean'的成员变量,Struts 2 会自动执行validate 方法。 If如果任何if语句为true,Struts 2会调用addFieldError方法(继承自ActionSupport)。
如果有任何错误被加如,Struts 2 将不会继续调用execute方法,而是返回input作为执行action的返回值。
处理Input返回值
如果返回input通常说明用户输入无效,这时我们通常返回原来的表单,外加错误提示。
为了处理input返回值,我们要在struts.xml的action节点加入以下result节点。
<result name="input">/register.jsp</result>
上面节点的位置位于success result节点后,action结束标签的前面。
错误信息
验证失败并且Struts 2返回input,Struts 2 framework会重新返回register.jsp。而且Struts 2会自动加上错误信息,这些错误信息的内容就是addFieldError方法中标明的,addFieldError 方法有两个参数,第一个是表单域的名字,第二个是该表单域对应的错误信息。
因此下面addFieldError方法的调用
addFieldError( "personBean.firstName", "First name is required.")
会导致"First name is required"消息显示在firstName表单域的上面。
运行项目,点击register链接,不填写直接提交会看见:
Struts 2调用validate方法,校验失败,带有错误信息的register.jsp页面被显示出来。
风格化错误信息
Struts 2 s:head标签通常被用于具有css风格的错误信息提示,在register.jsp页面head结束标签之前加上<s:head />重复上面步骤会看见:
总结
本教程学习了通过添加validate方法校验表单,另一个方式使用xml,后面会介绍。
下篇
下篇教程会学习消息资源文件,将文本从view页面分离。