数据的校验:

一、前台校验:JS校验

  • JS的校验不是必须的,JS可以被绕行,可以提升用户体验

二、后台校验:编码校验

  • 必须的校验

三、校验的方式:

  • 手动编码(不建议使用)
  • 配置文件(支持)

手动编码的校验方式:

  • 继承ActionSupport,在这个类中写校验方式。
  • 重写validate方法,validate方法在其他业务方法之前执行
  • 针对某个方法校验,需要在方法名应为:validate+方法名,如validateAdd()   validateModify()  validateExecute()

前端JSP:

Action类:

 public class LoginAction1 extends ActionSupport {
private String username;
private String password; public void setUsername(String username) {
this.username = username;
} public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
System.out.println(username);
System.out.println(password);
return NONE;
} //数据校验的方法
@Override
public void validate() {
//判断用户名不为空,把左右两边空格去掉字符串长度为0(说明用户名全是空格)
if( username== null || username.trim().length() == 0){
//阻止execute方法执行
this.addFieldError("username","用户名不能为空");
}
//判断密码不为空
if(password == null || password.trim().length() == 0 ){
this.addFieldError("password","密码不能为空");
}
}
public void validateExecute(){//针对某个方法校验
if(password.length() <6 || password.length()>12){
this.addFieldError("password", "密码应该在6到12位之间");
}
}
}

效果:

配置文件xml的校验方式(建议使用):必须提供所有属性的get方法

  • 针对所有方法的校验:
  • 针对某一个方法校验:

针对所有方法的校验:

1 在action所在包下创建一个与action类名相同的  LoginAction2-validation.xml:

<field-validator type="">  type属性依据源码:/com/opensymphony/xwork2/validator/validators/default.xml
 <?xml version="1.0" encoding="UTF-8"?>

   <!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.3//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<!-- 约束在xworkjar包下面,type参考default.xml -->
<validators>
<field name="username">
<field-validator type="requiredstring">
<message>用户名不能为空!(XML)</message>
</field-validator>
</field> <field name="password">
<field-validator type="requiredstring">
<message>密码不能为空!(XML)</message>
</field-validator>
</field>
</validators>

2 Action类:

 package com.itheima.struts2.demo4;

 import com.opensymphony.xwork2.ActionSupport;

 public class LoginAction2 extends ActionSupport {
private String username;
private String password;
//提供get方法,用于XML的调用
public void setUsername(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} @Override
public String execute() throws Exception {
System.out.println(username);
System.out.println(password);
return NONE;
}
}

前端JSP同上所述

效果页面:

针对Action某一个方法校验:

在Action所有包下创建一个文件与Action类名-要访问的方法对应的Action名称-validation.xml

例如:<action name="login2" class="com.itheima.struts2.demo4.LoginAction2" method="execute"></action>

创建校验execute的文件:

LoginAction2-login2-validation.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!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="password">
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="maxLength">12</param>
<message>密码需要在6-12位之间</message>
</field-validator>
</field>
</validators>

效果如下:

二十一 Struts的数据校验两种方式:手动编码和xml校验的更多相关文章

  1. 【代码笔记】iOS-向服务器传JSON数据的两种方式

    一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...

  2. SparkStreaming获取kafka数据的两种方式:Receiver与Direct

    简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...

  3. SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式

    SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...

  4. angular学习笔记(三)-视图绑定数据的两种方式

    绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...

  5. C++读取字符串数据的两种方式

    C++读取字符串数据的两种方式 对于同样的样例输入: ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Ride ...

  6. easyUI之datagrid绑定后端返回数据的两种方式

    先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...

  7. Ajax请求数据的两种方式

    ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...

  8. ORACLE导入大量数据的两种方式比较

    不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率. 第一种方式:采用工具导入sql文 ...

  9. Java解析Json数据的两种方式

    JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...

  10. iOS 通过URL网络获取XML数据的两种方式

    转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...

随机推荐

  1. winform BackgroundWorker 的用法 - 异步执行

    1.设置 backgroundWorker1.WorkerReportsProgress = true; backgroundWorker1.WorkerSupportsCancellation = ...

  2. 集合转换为数组toArray(),数组转换为集合asList()

    package seday12; import java.util.ArrayList;import java.util.Arrays;import java.util.Collection; /** ...

  3. python web django 2nd level -- 待更新

    练习代码位置 实例代码位置 --> app: myblog Form 利用Form表单验证,自己写的html 思路: 新建一个类 LoginForm(forms.Form) 新建对象 obj = ...

  4. 封装一个漂亮的ant design form标签组件

    在ant design 的form组件中 能用于提交的组件比较少,所以我在这写了一个可以单选.多选标签提交的组件,调用非常简单. 代码: import React,{Fragment} from 'r ...

  5. PAT 1013 Battle Over Cities (dfs求连通分量)

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

  6. leetcode929 Unique Email Addresses

    Every email consists of a local name and a domain name, separated by the @ sign. For example, in ali ...

  7. netty笔记-:EpollEventLoopGroup:Caused by: java.lang.ExceptionInInitializerError:Caused by: java.lang.IllegalStateException: Only supported on Linux

    今天在翻看netty的源码的时候发现netty对EventLoopGroup的实现有不止常用的NIOEventLoopGroup ,一共有以下几种. EpollEventLoopGroup NioEv ...

  8. 消息队列(二)--- RocketMQ-NameServer阅读

    概述   所有broker在启动的时候都会向NameServer进行注册,对它进行发送心跳包. 源码阅读 我们先从 NamesrvStartup这个类分析 public static void mai ...

  9. MySQL导出数据到文件报错

    执行如下语句: mysql> select * from users into outfile "F:\Develop\MySQL57\Uploads\users.txt" ...

  10. C语言:将字符串中的前导*号全部移到字符串的尾部。

    //规定输入的字符串中只包含字母和*号,fun函数:将字符串中的前导*号全部移到字符串的尾部. #include <stdio.h> void fun( char *a ) { ]; ch ...