struts2 validate手动验证
我们前面学习struts2知道,struts2通过拦截器实现了一些验证操作。
比如,如果是不能转换的类型在action中接受的话会跳转到错误页面,错误信息中会包含对应的错误信息,例如:

首先我们了解一下错误信息的显示。
在页面上,我们显示错误信息,使用的是<s:fielderror>标签。
<s:fielderror>默认遍历所有的错误信息。
如果指定了fieldName属性,就打印的是指定filedName对应的错误信息。
如果手动添加错误信息?如何实现验证?
在ActionSupport类中,实现了Validateable接口,我们可以重写validate方法或者validateXXX方法达到验证的目的:
struts2如果判断验证通过与否?
struts2中的错误信息使用的是errors集合存储。
底层源码:
public synchronized void addFieldError(String fieldName, String errorMessage) {
final Map<String, List<String>> errors = internalGetFieldErrors();
List<String> thisFieldErrors = errors.get(fieldName);
if (thisFieldErrors == null) {
thisFieldErrors = new ArrayList<String>();
errors.put(fieldName, thisFieldErrors);
}
thisFieldErrors.add(errorMessage);
}
如果errors集合为null,或者errors.size()==0,表示验证通过。fieldError这个list集合存储错误提示信息,map集合存储字段名和对应的错误信息对应的集合
我们如果验证失败,处理方式:在validate方法或者validateXXX方法使用addFieldError方法添加错误,只有有错误就会跳到错误页面
this.addFieldError(key,value)
value:错误提示信息
key:错误提示字段
例子:
public void validateLogin() {
System.out.println("Validate ********* validate");
/*
* 用户名不能为空
*/
if(username==null || username.trim().isEmpty()){
this.addFieldError("username","用户名不能为空");
}
if(psw==null || psw.trim().isEmpty()){
this.addFieldError("psw","密码不能为空");
}else{
String pattern="^[0-9a-zA-Z]{6,12}";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(psw);
boolean b=m.matches();
if(!b){
this.addFieldError("psw","密码的长度必须在6~12之间");
}
}
}
这里要注意一点:
如果重写validate方法,表示该action内的所有功能都要走验证方法,如果只是要验证单个方法,新建方法validate+要验证的执行方法名(该方法名首字母大写),或者validateDo+要验证的执行方法名(该方法名首字母大写)
因为fielderror是一个map集合,所以我们应该要理解<s:fielderror>标签了。我的前端页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'login.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<style type="text/css">
li{
list-style:none;
color:red;
} </style> </head> <body> <s:form name="loginForm" method="post" namespac="/validate" action="validateAction_login" theme="simple">
<table border="">
<tr>
<td>用户名</td>
<td><s:textfield name="username" /></td>
<td><s:fielderror fieldName="username" /></td>
</tr>
<tr>
<td>密码</td>
<td><s:password name="psw" /></td>
<td><s:fielderror fieldName="psw" /></td>
</tr>
<tr>
<td> </td>
<td><s:submit value="登录"/></td>
<td></td>
</tr>
</table>
</s:form>
<br/> <a href="${pageContext.request.contextPath }/validate/validateAction_test.do">test其他的方法</a>
</body>
</html>
struts2 validate手动验证的更多相关文章
- 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】
一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...
- struts2的validate输入验证
原创 struts2的输入验证有两种方式: 使用validate()方法实现验证 使用验证文件实现验证 下面通过一个例子介绍validate()方法验证——实现客户注册输入验证 设计的JSP页面代码: ...
- struts2框架xml验证
struts2验证分为3步: 1.获取需要验证的信息,使用同名属性,提供getter,setter方法.然后框架使用反射将值自动注入. 2.对信息进行验证,成功失败作出对应的选择. xml验证和手动验 ...
- struts2 基础4 验证器、 国际化
验证器: 验证器:用户输入验证 1.手动编程方式 )对于动作类中所有方法进行验证 a.动作类继承ActionSuport b.覆盖调用public void validate(){} 方法 c.在va ...
- Struts2的输入验证
一.概述: ① Struts2的输入验证 –基于 XWorkValidation Framework的声明式验证:Struts2提供了一些基于 XWork Validation Framework的内 ...
- 学习Struts--Chap06:Struts2之数据验证
1.数据验证的概述 1.1.数据验证的重要性 数据验证是非常必要的,不但和我们的常识性理解有关系,还有可能涉及到一些非法输入等问题,所以我们需要进行必要的数据验证,以保证我们在数据输入的时候都是正确且 ...
- Struts2 Validate
1.自定义action继承ActionSupport 2.复写validate方法,因为ActionSupport实现了Validate这个借口,而这个借口中定义了validate方法 3.当请求时, ...
- 【转】Struts2 表单验证与验证框架
版权声明:好笔头不如烂记性 https://blog.csdn.net/zsbgood/article/details/81114038 表单数据验证是很常见的功能,通常前端页面会有一次 js验证,但 ...
- Validator自动验证与手动验证
自动: public JResult projectAdd(@Valid Project project, BindingResult result) {Map<String,Object> ...
随机推荐
- struts2获取服务器临时目录
CreateTime--2017年9月7日08:57:39 Author:Marydon struts2获取服务器(tomcat.WebLogic)的临时目录 需要导入: import java. ...
- Hibernate学习二----------hibernate简介
© 版权声明:本文为博主原创文章,转载请注明出处 1.hibernate.cfg.xml常用配置 - hibernate.show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码 ...
- linux脚本实现自己主动输入password
使用Linux的程序猿对输入password这个举动一定不陌生,在Linux下对用户有严格的权限限制,干非常多事情越过了权限就得输入password.比方使用超级用户运行命令,又比方ftp.ssh连接 ...
- HTML5 2D平台游戏开发#3冲刺
断断续续地把Demo又写了一阵,终于把角色的冲刺动作完成了.冲刺的作用是使角色能够快速移动,闪避攻击或障碍.其完成效果如下: 首先,仍需要一些变量来表示角色的冲刺状态: //标识角色是否处于冲刺中 v ...
- JAVA使用并行流(ParallelStream)时要注意的一些问题
https://blog.csdn.net/xuxiaoyinliu/article/details/73040808
- git 工具 - 子模块(submodule)
From: https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97 子模块 有种情况我们经常 ...
- PHP、AJAX综合练习(增、删、改、查、分页、模糊查询)
先来几张效果图 主页面分页显示: 关键字查询,关键字描红 添加数组,弹出窗口,点击保存,再不刷新页面的同时添加到网页数据 修改界面:弹出窗口,文本框中保留点击的车辆的原始信息 主页面代码 <me ...
- 再看GS接包过程
再看GS接包过程 bool GameServer::ProcessLoop(packet& rPkt) { if(false == m_spDataLayer->Recv(rPkt)) ...
- Circling Round Treasures CodeForces - 375C
C. Circling Round Treasures time limit per test 1 second memory limit per test 256 megabytes input s ...
- JAVA数据类型(转)
java中数据的基本类型分为: 基本数据类型和引用数据类型,对此不多介绍: 接下来讨论一下java中数据类型存储在哪 基本数据类型存储在哪,取决于基本类型在哪声明: 1 ...