二十一 Struts的数据校验两种方式:手动编码和xml校验
数据的校验:
一、前台校验: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校验的更多相关文章
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...
- SparkStreaming获取kafka数据的两种方式:Receiver与Direct
简介: Spark-Streaming获取kafka数据的两种方式-Receiver与Direct的方式,可以简单理解成: Receiver方式是通过zookeeper来连接kafka队列, Dire ...
- SparkStreaming与Kafka,SparkStreaming接收Kafka数据的两种方式
SparkStreaming接收Kafka数据的两种方式 SparkStreaming接收数据原理 一.SparkStreaming + Kafka Receiver模式 二.SparkStreami ...
- angular学习笔记(三)-视图绑定数据的两种方式
绑定数据有两种方式: <!DOCTYPE html> <html ng-app> <head> <title>2.2显示文本</title> ...
- C++读取字符串数据的两种方式
C++读取字符串数据的两种方式 对于同样的样例输入: ladder came tape soon leader acme RIDE lone Dreis peat ScAlE orb eye Ride ...
- easyUI之datagrid绑定后端返回数据的两种方式
先来看一下某一位大佬留下的easyUI的API对datagrid绑定数据的两种方式的介绍. 虽然精简,但是,很具有“师傅领进门,修行靠个人”的精神,先发自内心的赞一个. 但是,很多人和小编一样,第一次 ...
- Ajax请求数据的两种方式
ajax 请求数据的两种方法,有需要的朋友可以参考下. 实现ajax 异步访问网络的方法有两个.第一个是原始的方法,第二个是利用jquery包的 原始的方法不用引入jquery包,只需在html中编写 ...
- ORACLE导入大量数据的两种方式比较
不管是开发还是测试,工作中经常需要去批量新增测试数据,但是大量数据的新增速度有时候让我们苦不堪言,下面通过两种方式完成oracle数据的批量新增,比较两种方式的效率. 第一种方式:采用工具导入sql文 ...
- Java解析Json数据的两种方式
JSON数据解析的有点在于他的体积小,在网络上传输的时候可以更省流量,所以使用越来越广泛,下面介绍使用JsonObject和JsonArray的两种方式解析Json数据. 使用以上两种方式解析json ...
- iOS 通过URL网络获取XML数据的两种方式
转载于:http://blog.csdn.net/crayondeng/article/details/8738768 下面简单介绍如何通过url获取xml的两种方式. 第一种方式相对简单,使用NSD ...
随机推荐
- cnblogs在手机端显示的一些坑
目前在网上搜了个博皮,很高大上,感兴趣的朋友可以看一下,但是在手机端显示这些html5代码有很多缺陷: 1. h1.h2只能显示一行,如果字数太多,则会被隐藏 就像你现在看到的,h1原本内容为: 目前 ...
- C 语言实例 - 判断闰年
用户输入年份,判断该年份是否为闰年. #include <stdio.h> int main() { int year; printf("输入年份: "); scanf ...
- 读写json文件
def read_json(path): """return dict""" with open(path,'r+')as f: retur ...
- Linux - 常用Shell软件
tldr conda dstat htop oh-my-zsh https://github.com/nicolargo/glances neofetch
- 事件和方法的区别,以input框的blur事件为例
1. 我们在原生的js中学到的事件 onblur 2. 使input框失去焦点的方法blur 3. jquery中的方法blur 是当input框失去焦点时触发的回调 三者是不相同的 事件:指的是一个 ...
- 剑指offer系列——62.二叉搜索树的第k个结点
Q:给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4. T: 中序遍历,递归: int count = 0; public ...
- 命令行选项解析函数getopt()
1.定义: int getopt(int argc, char * const argv[], const char *optstring); 2.描述: getopt是用来解析命令行选项参数的,但是 ...
- P1478
昨天花一下午时间,把 codeblocks 代码 highlight 改了改,感觉还不错 :) 咳咳.还是说题吧. 这道题利用贪心思想,先去除所有够不着的,然后按使用力气 $ y_i $ 从小到大排序 ...
- @ModelAttribute与@RequestBody的区别
一.@ModelAttribute与@RequestBody的区别 @ModelAttribute与@RequestBody都是用来注解解析前端发来数据,并自动对应到所定义的字段名称. 这里先放结论, ...
- Bugku-CTF加密篇之ok(Ook!)