当前位置: 代码迷 >> 编程 >> Struts2课程六——Form Validation
  详细解决方案

Struts2课程六——Form Validation

热度:6746   发布时间:2013-02-26 00:00:00.0
Struts2教程六——Form Validation
本教程假设你以完成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 中加入以下方法

validate method
	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页面分离。

  相关解决方案