struts2学习之数据校验

Struts2框架的输入校验是通过XML配置文件或者注解来实现的,当然在Action中进行手动(编码)校验也是允许的,并且可以手动校验和XML配置文件或者注解方式校验一起使用。

数据校验依赖于validation和workflow两个拦截器。validation拦截器进行校验并创建具体字段错误的列表,workflow拦截器检查存在的校验错误,如果有,就返回"input"结果码,返回到包含校验的表单页面。

在基于Struts2框架的Web应用中,输入校验即可以通过在服务端完成,也可以在客户端完成。本文主要记录Struts2在服务端的几种校验方式。

Struts2在服务端的校验方式主要有两种:

(1)基于硬编码的方法:

              在业务控制器类中重写validate()方法或者使用形式为validateXxx()形式的校验方法对输入数据进行校验。其中Xxx表示action中不同的方法名称。

package cn.bdx.controller;

import cn.bdx.model.Book;

import com.opensymphony.xwork2.ActionSupport;

public class BookController extends ActionSupport{
	private Book book;
	/**
	 * 添加书籍
	 * @return
	 */
	public String add() {
		return SUCCESS;
	}
	/**
	 * 添加书籍的验证
	 * @return
	 */
	@Override
	public void validate() {
		if(book == null) {
			this.addFieldError("bookError", "book不能为空");
		}else if(book.getName().isEmpty()) {
			this.addFieldError("bookError", "书名不能为空");
		}else if(book.getPrice() < 0) {
			this.addFieldError("bookError", "价格不能为空");
		}
	}
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	
}

或者:

package cn.bdx.controller;

import cn.bdx.model.Book;

import com.opensymphony.xwork2.ActionSupport;

public class BookController extends ActionSupport{
	private Book book;
	/**
	 * 添加书籍
	 * @return
	 */
	public String add() {
		return SUCCESS;
	}
	/**
	 * 添加书籍的验证
	 * @return
	 */
	public void validateAdd() {
		if(book == null) {
			this.addFieldError("bookError", "book不能为空");
		}else if(book.getName().isEmpty()) {
			this.addFieldError("bookError", "书名不能为空");
		}else if(book.getPrice() < 0) {
			this.addFieldError("bookError", "价格不能为空");
		}
	}
	public Book getBook() {
		return book;
	}
	public void setBook(Book book) {
		this.book = book;
	}
	
}

 注:这种方式代码的耦合度比较高。

(2)基于配置文件的方法:

              这种方式是吧校验规则保存在特定的XML格式配置文件中,实现输入校验和Action类的分离,以此来降低代码的耦合性。规则结构由xwork-validator-1.0.2.dtd文件定义的,新建BookController-validation.xml

基于字段的校验规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
	"- //OpenSymphony Group//XWork Validator 1.0.2//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<field name="book.name">
		<field-validator type="requiredstring">
			<message>书名不能为空!</message>
		</field-validator>
	</field>
	<field name="book.price">
		<field-validator type="required">
			<message>请输入单价!</message>
		</field-validator>
		<field-validator type="double">
			<param name="minExckusive">0</param>
			<message>单价必须大于${minExclusive}</message>
		</field-validator>
	</field>
</validators>

 基于validator校验器的校验规则:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
	"- //OpenSymphony Group//XWork Validator 1.0.2//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
	<validator type="requiredstring">
		<param name="fieldName">book.name</param>
		<message>书名不能为空!</message>
	</validator>
	<validator type="double">
		<param name="fieldName">book.price</param>
		<param name="minExckusive">0</param>
		<message>单价必须大于${minExclusive}</message>
	</validator>
</validators>

BookController-validation.xml文件在项目中的位置跟BookController处于同一个包中

数据分析面试八股文--技能软件类 数据分析的“三板斧"指的是三个在 Python 数据分析领域广泛使用的库:NumPy,Pandas,和 Matplotlib。这三个库提供了处理和分析数据的强大工具。NumPyNumPy(Numerical Python)是一个开源 Python 库,用于支持大型多维数组和矩阵运算。此外,NumPy 还提供了大量的数学函数来操作这些数组。np.array():创建数组np.arange():返回一个有终点和起点的固定步长的排列。 阅读详情

相关推荐

零外围电路!用CH340X实现ESP32一键下载的完整教程

本文详细介绍了如何利用CH340X系列USB转串口芯片实现ESP32的一键自动下载功能,无需任何外围逻辑控制电路。通过解析CH340X的增强型DTR/RTS功能,提供核心电路设计、电压匹配方案,并指导在Arduino IDE和PlatformIO中进行软件配置,帮助开发者构建简洁、可靠且低成本的ESP32下载方案。

gpu4optimizer的博客 776

npm安装gitbook出现Error: Cannot find module 'graceful-fs'的解决方法

   一、问题        在git使用命令行npm install gitbook-cli -g   安装 npm list graceful-fsgitbook时报了一个错误:    Error: Cannot find module 'graceful-fs'    at Function.Module._resolveFilename (internal/modules/cjs/load...

kit_where的博客 1万+

别再手动算了!用Excel函数一键搞定AQI和首要污染物分析(附完整公式模板)

本文介绍如何利用Excel函数自动化计算AQI和首要污染物分析,大幅提升数据处理效率。通过构建标准化输入模板、智能计算IAQI、自动判定AQI与首要污染物,并生成可视化仪表盘,帮助环保工作者快速完成每日监测报告。

weixin_30443075的博客 345

Struts2学习——0600简单数据校验

背景在我们的实际应用中,数据校验是一个非常常见的东西。例如,在用户注册系统中,肯定是要先表单校验的,然后一般来说,校验失败的东西,放在表单后面。Struts2实际上可以利用Action中的方法,把错误的东西先addErrorField里,然后在jsp中利用struts2的标签再拿出来。简单数据校验其实正常工程中的数据校验要更难,但是,都是从简单的一点点过渡来的。这次把文档的顺序改一下,我们先看看效果

DO_IT_TODAY的博客 489

从零构建OpenBMC风扇控制:基于phosphor-pid-control的实战配置指南

本文详细介绍了如何从零开始构建OpenBMC风扇控制系统,基于phosphor-pid-control框架实现风扇自动调速。通过解析PID算法配置、传感器定义及控制区域设置,提供工业级散热解决方案,帮助开发者优化服务器能效与可靠性。

weixin_29263201的博客 749

西安交通大学SQ轴承数据集(文末附数据)

西安交通大学SQ轴承数据集

qq_43271683的博客 1万+

Struts2学习(八)数据校验实现

我们的网站是要与用户进行交互的,其中最重要的交互方式便是数据的输入输出。但对于用户来说,并不是会按照我们所期望的形式来进行输入,这是就需要对用户输入的数据的格式进行校验,也就是所谓的数据校验。 其实数据校验意义就是保证进入后台的数据都是安全的! 在大多数情况下我们使用的是JavaScript来进行输入数据的校验,但是这种方式具有局限性 如图所示:我们可以通过使用url拼接的方式直接将数据传到

wangxin1248的博客 1268

Mplus—验证性因素分析(Confirmatory Factor Analysis, CFA)

介绍一阶和二阶验证性因素分析概况及在Mplus中的操作方法。

m0_54401011的博客 1万+

(Struts2学习篇) Struts2数据校验之一

 数据校验的意义 WEB数据收集的复杂性 客户数据输入的误操作 其他恶意攻击

zhouzhiwengang的专栏 747

从传统业务到 AI Skill:产品经理也能看懂的能力改造指南(含完整案例)

从传统业务到 AI Skill:产品经理也能看懂的能力改造指南(含完整案例)

专注于编程、AI、人工智能等多个领域内容研究和分析 641

【100%通过率】华为od机试C卷【出差 / 员工派遣】C++ 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2194

(Struts2学习篇) Struts2数据校验之二

 struts2数据校验的方法: validate方法验证:

zhouzhiwengang的专栏 737

【AI智能体】Codex 插件从使用到项目开发实战操作详解

Codex 插件从使用到项目开发实战操作详解

congge 7645

struts2学习 : 数据校验

struts2 的数据校验的底层是通过拦截器实现的 <interceptorname="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>...

chixian3322的博客 142

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Struts2学习笔记(十)——数据校验

Struts2的数据校验属于服务器端校验,Struts2 支持校验方式 : 手动校验(代码校验) :在服务器端通过编写java代码,完成数据校验自动校验(配置校验) :XML配置校验(主流) 和 注解配置校验 1、手动校验    1)Struts2的手动校验步骤:   首先要从页面中获取对应的标签name属性的值,在动作类action中声明同名的属性,提供get和set方法

changhenshui1990的博客 472

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java web 数据校验_JavaWeb学习:Struts2数据校验

index.jspInsert title here一、手动编码①、Action(setxxx方法为了将画面值设置到对应的属性中)public class UserAction extendsActionSupport {//接收页面数据privateString name;privateString password;public void setName(String name) {this....

weixin_30160357的博客 178

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

struts2数据校验框架学习

数据校验有三种:服务器端校验,客户端校验,AJAX校验。 具体参见示例。

Jason 的专栏 144

Struts2学习第二天——获取参数与数据校验

struts2中获取请求参数 1.属性驱动 2.模型驱动(在开发中应用比较多) struts2中的类型转换 自定义类型转换器 关于struts2提供的数据校验 1.手动校验(了解) 2.配置校验(xml,常用) 校验配置文件的配置方法 配置校验中的常用校验器

lutianfei的专栏 4102

【转载】Struts2学习总结 ---- 数据校验

数据校验数据校验流程 Struts2中的数据校验方式:1.validate()方法:步骤: 1.action要继承ActionSupport 2.重写validate方法做通用验证 3.在配置文件的action中配置input视图 4.jsp页中用s:fielderror来显示错误信息-->@Overridepublic void validate() { if(null==user.getUse

hcyFly 486

struts2学习4:数据校验

<br />为了避免用户的输入引起底层异常,通常会在进行业务逻辑操作之前,先执行基本的数据校验。<br />方法一:继承ActionSupport<br />      ActionSupport类是一个工具类,它已经实现了Action接口。除此之外,它还实现了Validateable接口,提供了数据校验功能。<br /><br /><br /><br />在Validatable接口中定义了一个validate()方法,重写该方法,如果校验表单输入域出现错误,则将错误添加到ActionSupport类的f

274

Struts2的学习——13.数据校验(2)

12.数据校验(2) 使用struts2提供的校验框架实现数据的校验。实现步骤如下. 创建jsp页面 创建action类 在action类所在包下 添加校验规则文件以ActionClassName-validation.xml命名。 配置struts.xml文件 jsp页面: action处理类 UserFormAction-validation.xml struts.xml 校验框...

qq_38268534的博客 174

JavaEE学习记录二:Struts2框架对数据进行校验

一、常用的验证规则: 1.必填检验 <validators> <field name="username"> <field-validator type="required"> <message>指定检验失败的提示信息</message> </field-validator> </field> </...

Time and Tide waits for no man 300

struts2学习笔记--使用Validator校验数据

我们在进行一些操作是需要对用户的输入数据进行验证,比如网站的注册,需要对各个数据项进行数据校验,Struts2提供了一些默认的校验器,比如数字的检测,邮箱的检测,字符串长度的检测等等.   常用的Validator 校验器 作用 required 必填校验器,要求字段必须有值 requiredstring 必填字符...

153

Struts2学习总结 ---- 数据校验

数据校验数据校验流程 Struts2中的数据校验方式:1.validate()方法:步骤: 1.action要继承ActionSupport 2.重写validate方法做通用验证 3.在配置文件的action中配置input视图 4.jsp页中用s:fielderror来显示错误信息-->@Overridepublic void validate() { if(null==user.getUse

skyer518的专栏 488

Struts2的学习——12.数据校验(1)

12.数据校验(1) 数据校验分为两类,一类是前端的数据校验,一般通过js来实现,一类是后端的数据校验。在对一些安全级别要求较高项目都需要对其进行后端验证。struts2提供了两种后端校验方法,一种是硬编码实现,一种是校验框架实现。 如果要使用struts2的数据校验功能,action需要继承ActionSupport类。在该类中提供了一个validate()方法,可以将验证规则写在该方法中,只有...

qq_38268534的博客 223

(Struts2学习篇)Struts2数据校验-validate()方法实现

第一步:编写相关Action public class RegisterAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; // 相关参数封装 // 用户名 private String username; // 密码 pri

zhouzhiwengang的专栏 902
上一篇: struts2学习之拦截器
下一篇: spring学习笔记--bean的配置
MjCreator
博客等级 码龄11年 4粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值