我们前面学习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>&nbsp;</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手动验证的更多相关文章

  1. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  2. struts2的validate输入验证

    原创 struts2的输入验证有两种方式: 使用validate()方法实现验证 使用验证文件实现验证 下面通过一个例子介绍validate()方法验证——实现客户注册输入验证 设计的JSP页面代码: ...

  3. struts2框架xml验证

    struts2验证分为3步: 1.获取需要验证的信息,使用同名属性,提供getter,setter方法.然后框架使用反射将值自动注入. 2.对信息进行验证,成功失败作出对应的选择. xml验证和手动验 ...

  4. struts2 基础4 验证器、 国际化

    验证器: 验证器:用户输入验证 1.手动编程方式 )对于动作类中所有方法进行验证 a.动作类继承ActionSuport b.覆盖调用public void validate(){} 方法 c.在va ...

  5. Struts2的输入验证

    一.概述: ① Struts2的输入验证 –基于 XWorkValidation Framework的声明式验证:Struts2提供了一些基于 XWork Validation Framework的内 ...

  6. 学习Struts--Chap06:Struts2之数据验证

    1.数据验证的概述 1.1.数据验证的重要性 数据验证是非常必要的,不但和我们的常识性理解有关系,还有可能涉及到一些非法输入等问题,所以我们需要进行必要的数据验证,以保证我们在数据输入的时候都是正确且 ...

  7. Struts2 Validate

    1.自定义action继承ActionSupport 2.复写validate方法,因为ActionSupport实现了Validate这个借口,而这个借口中定义了validate方法 3.当请求时, ...

  8. 【转】Struts2 表单验证与验证框架

    版权声明:好笔头不如烂记性 https://blog.csdn.net/zsbgood/article/details/81114038 表单数据验证是很常见的功能,通常前端页面会有一次 js验证,但 ...

  9. Validator自动验证与手动验证

    自动: public JResult projectAdd(@Valid Project project, BindingResult result) {Map<String,Object> ...

随机推荐

  1. Vue.js 很好,但会比 Angular 或 React 更好吗?

    文章转自:http://www.oschina.net/translate/vuejs-is-good-but-is-it-better-than-angular-or-rea Vue.js 是一个用 ...

  2. wcf上传字节数组报错问题

    为了实现上传大文件所以我们要如下设置最大值,其中security是设置访问服务的认证,此处是把它设置成为不认证,transferMode就是设置运用流的模式 <webHttpBinding> ...

  3. C语言日期计算器

    记录下码子 # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> # include <stdlib.h> int days ...

  4. 封装CLLocationManager定位获取经纬度

    创建调用方法,在.h文件里 #import <Foundation/Foundation.h> @interface RMMapLocation : NSObject { void (^s ...

  5. Fragment小结

    Fragment是Android3.0之后增加的新特性,通常人们叫它碎片.可是,我认为把它理解成一个View模块比較好,尽管它不是继承自View.假设阅读过源代码就知道它是内置View对象从而实现Vi ...

  6. 不安装Oracle客户端也能使用PL/SQL

    解压缩 instantclient_12_1 到 D:\Oracle\instantclient_12_1 在文件夹内建立目录, /NETWORK/ADMIN 在该目录下,新建文件tnsnames.o ...

  7. mysql忘记root密码且忘了安装目录如何修改root密码

    问题背景 很久之前在本机上安装mysql,也没用过(主要是用Oracle),导致root密码忘记.更严重的是,连自己的安装目录都忘记了. 遇到的问题 1.在任务管理器可以找到mysql的服务已经起来, ...

  8. spring中xml配置和autowired混用

    1.类的混用: 配置文件中的配置: <bean id="a" class="com.ab.cc.A" /> 类中的配置 @Autowired A a ...

  9. jsp 导出excel

    设置头文件 <% response.setHeader( "Pragma ", "public"); response.setHeader( " ...

  10. 关于erlang的-run 的启动参数

    在github上,关于erlang的一致性hash,有erlang-ryng和 hash_ring .在这里先聊下erlang-ryng这个. 在erlang-ryng的启动方式上,github上提供 ...