Struts2 数据校验之四兄弟
Posted 刘二雄
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 数据校验之四兄弟相关的知识,希望对你有一定的参考价值。
现在是科技的时代,大多数人都在网上购物了, 我们都碰到过相同的问题,各大网站弄的那些各种各样的注册页面,相信大家都深有体会。
有了这验证就很好的保证了我们的信息的准确性和安全性。
接下来我给大家讲解一下用struts2怎么实现页面上简单的拦截。
方法一:
用execute()方法来实现
1.0创建一个UserInfo类
package cn.struts.entity; /** * Created by accp on 2017/3/6. */ public class UserInfo { //用户名 private String name; //密码 private String pwd; //电话 private String phone; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
2.0创建一个ExecuteAction继承ActionSupport
package cn.struts.action; import cn.struts.entity.UserInfo; import com.opensymphony.xwork2.ActionSupport; /** * Created by accp on 2017/3/6. */ public class ExecuteAction extends ActionSupport { //用户对象 private UserInfo user; //确认密码 private String okpwd; @Override public String execute() throws Exception { //判断用户名是否为空 if (user.getName().length() == 0) { addFieldError("name", "用户名不能为空"); } //判断密码是否为空 if (user.getPwd().length() == 0) { addFieldError("pwd", "密码不能为空"); } //判断电号码是否为空 if (user.getPhone().length() == 0) { addFieldError("phone", "电话不能为空"); } //判断两次输入的密码是否一致 if(!user.getPwd().equals(okpwd)){ addFieldError("userpwd", "两次密码不一致"); } //这是最重要的判断 //判断上面是否还存在没有通过的验证 if (this.hasFieldErrors()) { return "input"; } return "success"; } public UserInfo getUser() { return user; } public void setUser(UserInfo user) { this.user = user; } public String getOkpwd() { return okpwd; } public void setOkpwd(String okpwd) { this.okpwd = okpwd; } }
3.0编写struts.xml
<action name="executeAction" class="cn.struts.action.ExecuteAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action>
4.0编写页面
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <html> <title>登陆页面</title> <body> <s:fielderror></s:fielderror> <form action="execute" method="post"> 用户名:<input name="user.name"><br/> 电话:<input name="user.phone"><br/> 密码:<input name="user.pwd"><br/> 确认密码:<input name="okpwd"><br/> <input type="submit" value="提交"> </form> </body> </html>
success.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <html> <head> <title>成功页面</title> </head> <body> 欢迎你:<s:property value="user.name"></s:property></body> </html>
效果如下:
这些就是我们注册时常常碰到的提示!!!!
方法二:
用validate方法来进行验证
创建实体类我们在这里就省略了,直接创建ValidateAction
1.0ValidateAction继承ActionSupport ,重写了validate()方法
package cn.struts.action; import cn.struts.entity.UserInfo; import com.opensymphony.xwork2.ActionSupport; /** * Created by accp on 2017/3/6. */ public class ValidateAction extends ActionSupport { private UserInfo user; private String okpwd; @Override public void validate() { //判断用户名是否为空 if(user.getName().length()==0){ addFieldError("name","用户名不能为空"); } //判断密码是否为空 if(user.getPwd().length()==0){ addFieldError("pwd","密码不能为空"); } //判断电话是否为空 if(user.getPhone().length()==0){ addFieldError("phone","电话不能为空"); } //判断两次密码输入是否一致 if(!user.getPwd().equals(okpwd)){ addFieldError("userpwd", "两次密码不一致"); } } public UserInfo getUser() { return user; } public void setUser(UserInfo user) { this.user = user; } public String getOkpwd() { return okpwd; } public void setOkpwd(String okpwd) { this.okpwd = okpwd; } }
2.0struts.xml:
<!--validate验证--> <action name="validate" class="cn.struts.action.ValidateAction"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action>
我们只需要更改表单提交的名称即可。
3.0index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <html> <title>登陆页面</title> <body> <s:fielderror></s:fielderror> <form action="validate" method="post"> 用户名:<input name="user.name"><br/> 电话:<input name="user.phone"><br/> 密码:<input name="user.pwd"><br/> 确认密码:<input name="okpwd"><br/> <input type="submit" value="提交"> </form> </body> </html>
得到的效果跟上述方法一相同。
写到这里同学们有没有疑问?怎么没有验证长度,不可能我们注册或者登录时没有别的条件限制?
能想到这的都是经常上网站购物的..............
接下来我们讲解第三种方法
方法三:
上面我们也提到了可能有别的验证,比如说长度,格式等等之类的。在这里我们定义一个方法来实现。
1.0创建ValidateXxxAction继承ActionASupport
package cn.struts.action; import cn.struts.entity.UserInfo; import com.opensymphony.xwork2.ActionSupport; /** * Created by accp on 2017/3/6. */ public class ValidateXxxAction extends ActionSupport{ private UserInfo user; private String okpwd; //定义方法来做验证 public void validateRegist(){ //用户名的长度 if(user.getName().length()<6){ addFieldError("name","用户名长度不能小于6位"); } } //这里一定要注意:这个方法名称与上面自己定义的方法的后半部分相同 public String regist(){ return SUCCESS; } @Override public void validate() { //判断用户名是否为空 if(user.getName().length()==0){ addFieldError("name","用户名不能为空"); } //判断密码是否为空 if(user.getPwd().length()==0){ addFieldError("pwd","密码不能为空"); } //判断电话是否为空 if(user.getPhone().length()==0){ addFieldError("phone","电话不能为空"); } //判断两次密码输入是否一致 if(!user.getPwd().equals(okpwd)){ addFieldError("userpwd", "两次密码不一致"); } } public UserInfo getUser() { return user; } public void setUser(UserInfo user) { this.user = user; } public String getOkpwd() { return okpwd; } public void setOkpwd(String okpwd) { this.okpwd = okpwd; } }
2.0struts.xml
<!--测试ValidateXxxAction --> <action name="validatexxx" class="cn.struts.action.ValidateXxxAction" method="regist"> <result>/success.jsp</result> <result name="input">/index.jsp</result> </action>
3.0index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <html> <title>登陆页面</title> <body> <s:fielderror></s:fielderror> <form action="validatexxx" method="post"> 用户名:<input name="user.name"><br/> 电话:<input name="user.phone"><br/> 密码:<input name="user.pwd"><br/> 确认密码:<input name="okpwd"><br/> <input type="submit" value="提交"> </form> </body> </html>
效果图:
除了上述我们讲的这些验证方法之外,struts2框架自身也带有验证。
方法四:
1.0创建ValidateFramework继承ActionSupport
package cn.struts.action; import cn.struts.entity.UserInfo; import com.opensymphony.xwork2.ActionSupport; /** * Created by accp on 2017/3/6. */ public class ValidateFramework extends ActionSupport { private UserInfo user; private String okpwd; @Override public String execute() throws Exception { return SUCCESS; } public UserInfo getUser() { return user; } public void setUser(UserInfo user) { this.user = user; } public String getOkpwd() { return okpwd; } public void setOkpwd(String okpwd) { this.okpwd = okpwd; } }
2.0编写ValidateFramework-validation.xml文件
下图是框架验证中验证器的类型图:
<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> <!--判断用户名--> <field name="user.name"> <!--自段不能为空--> <field-validator type="requiredstring"> <param name="trim">true</param> <message>用户名不能为空</message> </field-validator> <!--判断长度是否符合--> <field-validator type="stringlength"> <param name="maxLength">10</param> <param name="minLength">6</param> <message>用户名的长度必须在${minLength}到${maxLength}</message> </field-validator> </field> <!--判断密码和确认密码--> <field name="user.pwd"> <field-validator type="requiredstring"> <message>密码不能为空</message> </field-validator> </field> <field name="okpwd"> <field-validator type="fieldexpression"> <param name="expression">user.pwd==okpwd</param> <message>密码和确认密码必须一致</message> </field-validator> </field> <!--判断电话--> <field name="user.phone">
<filed-validator type="requiredstring">
<message>电话不能为空</message>
</filed-validator> <field-validator type="regex"> <param name="regex">^(\\d{3,4}-){0,1}(\\d{7,8})$</param> <message>电话格式不正确</message> </field-validator> </field> </validators>
3.0编写index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@taglib prefix="s" uri="/struts-tags" %> <html> <title>登陆页面</title> <body> <s:fielderror></s:fielderror> <form action="regist" method="post"> 用户名:<input name="user.name"><br/> 电话:<input name="user.phone"><br/> 密码:<input name="user.pwd"><br/> 确认密码:<input name="okpwd"><br/> <input type="submit" value="提交"> </form> </body> </html>
效果图:
我简单的讲述了几种在struts2中常用的验证方法,在真实的开发模式中有许许多多的方法可以实现。在这里只是传递一种思想,没有多少技术含量..........
以上是关于Struts2 数据校验之四兄弟的主要内容,如果未能解决你的问题,请参考以下文章