struts2学习笔记(六)-数据验证之validate()方法
struts2学习笔记(6)---数据验证之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;
public class UserAction extends ActionSupport implements ModelDriven<User>{
private User user;
@Override
public 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";
}
@Override
public 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页面:
<body>
<center>
<!-- 普通的表单提交 -->
<form action="user_login" method="post">
<table>
<tr>
<td>帐号:</td>
<td><input type="text" name="userName"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中userName的值 -->
${fieldErrors['userName'][0]}
</td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password"></td>
<td>
<!-- 通过EL表达式取出 fieldErrors中password的值 -->
${fieldErrors['password'][0]}
</td>
</tr>
<tr>
<td></td>
<td align="left"><input type="submit" value="登录"> <input
type="reset" value="重置">
</tr>
</table>
</form>
</center>
<hr>
<center>
<!-- 通过EL表达式取出 fieldErrors中全部的错误消息 -->
${fieldErrors}<br>
<!-- 通过struts标签取出fielderror中全部的错误消息 -->
<s:fielderror />
</center>
<hr>
<center>
<!-- 使用struts提供的标签的表单,可以在每一个textfield前面显示错误信息 -->
<s:form action="user_login" method="post">
<s:textfield name="userName" label="帐号" />
<s:textfield name="password" label="密码" />
<s:submit value="提交"></s:submit>
</s:form>
</center>
<hr>
<center>
<s:debug/>
</center>
</body>
1.要使用struts标签,还需在页面首部上加上:
<%@ taglib prefix="s" uri="/struts-tags"%>
2.错误信息fieldErrors既可以由EL表达式取得,又可以由struts标签<s:fielderror />
取得。
3.使用<s:form></form>
的好处:如果验证错误,错误信息会直接显示在对应属性的textfield前面。
运行结果及截图
1.验证通过,登录成功的情况:
2.验证失败,重新跳转到index.jsp的情况:
点击debug标签:
版权声明:本文为博主原创文章,未经博主允许不得转载。