数据验证之validate()方法

问题引入

通常在form表单输入数据提交前,会进行输入的验证和限制,比如登陆时账户和密码不能为空,注册时两次输入密码必须一致……一般可用JS进行控制。而struts2中提供了更为便捷的方法。

使用Action的validate()方法

1.Action继承ActionSupport 2.在Action中覆写validate()方法 3.在validate()方法中使用addFieldError()方法,配置struts.xml文件。

源代码

UserAction.java

package org.dny.action;import org.dny.model.User;import com.opensymphony.xwork2.ActionSupport;import com.opensymphony.xwork2.ModelDriven; <User>{private User user;@Overridepublic User getModel() {if(this.user == null)this.user = new User();return this.user;}public String login() { //登录System.out.println(“UserAction login”);System.out.println(“userName:”+user.getUserName());System.out.println(“paswword:”+user.getPassword());return “loginSuccess”;}@Overridepublic void validate() { //在Action的所有其他函数之前函数之前执行,进行验证System.out.println(“UserAction validate”);if(user.getUserName() == null || user.getUserName().trim().equals(“”))this.addFieldError(“userName”, “帐号不能为空”); //给userName属性添加错误消息“帐号不能为空”if(user.getPassword() == null || user.getPassword().trim().equals(“”))this.addFieldError(“password”, “密码不能为空”);}}

1.函数addFieldError(“字段名”,”错误信息”):给一个字段(属性)添加错误消息 2.点击登录,调用Action的login()方法。而在Action的login()方法执行之前,会先执行validate()方法。 3.如果在validate()方法中执行了addFieldError()或者addActionError()方法,,则Action不会执行login()方法,而是直接跳转到一个名为”input”的result视图。

struts.xml文件的action配置:

<action name=”user_*” class=”org.dny.action.UserAction” method=”{1}”><result name=”loginSuccess”>/success.jsp</result><result name=”input”>/index.jsp</result></action>

1.当登录成功时,会跳转到success.jsp页面 2.当输入没有通过validate()函数的验证时,会跳转到首页。

index.jsp页面:

=>>=><!– 通过EL表达式取出 fieldErrors中userName的值 –>${fieldErrors[‘userName’][0]}>=><td><!– 通过EL表达式取出 fieldErrors中password的值 –>${fieldErrors[‘password’][0]}>==”submit” value=”登录”> <input>>${fieldErrors}/>>====>>>

1.要使用struts标签,还需在页面首部上加上:

<%@ taglib prefix=”s” uri=”/struts-tags”%>

2.错误信息fieldErrors既可以由EL表达式取得,又可以由struts标签<s:fielderror />取得。 3.使用<s:form></form>的好处:如果验证错误,错误信息会直接显示在对应属性的textfield前面。

运行结果及截图

1.验证通过,登录成功的情况:

2.验证失败,重新跳转到index.jsp的情况:

点击debug标签:

放弃等于又一次可以选择的机会。

数据验证之validate()方法

相关文章:

你感兴趣的文章:

标签云: