java之struts2之数据检验

1.使用struts2时,有时候需要对数据进行相关的验证。如果对数据的要求比较严格,或对安全性要求比较高时,前端 js 验证还不够,

需要在后端再进行一次验证,保证数据的安全性。

2.struts2提供了两种机制来进行后端的数据验证。

  • 编程方式
  • 验证框架

3.通过编程方式来进行数据检验需要继承ActionSupport类。在ActionSupport类中有一个validate方法,在该方法中实现数据校验。如果要通过编程方式进行校验,那么需要在处理类的Action中重写validate方法。在action的执行方法中,先执行validate方法,再执行处理业务方法。

4.实现案例

UserAction:

public class UserAction extends ActionSupport{private String name;private String pwd;private int age;/*** 在validate方法中 进行数据校验* 在validate方法中 如果没有添加错误信息,那么验证通过*/public void validate() {System.out.println("执行validate方法");if(name==null||name.length()<4){//验证不通过this.addFieldError("name", "输入的用户名不合法");}if(pwd==null||pwd.length()<6){this.addFieldError("pwd", "输入的密码长度不合法");}if(age<0||age>256){this.addFieldError("age", "输入的年龄不合法");}}@Overridepublic String execute() throws Exception {System.out.println("执行execute");System.out.println("name="+name);System.out.println("pwd="+pwd);System.out.println("age="+age);return Action.SUCCESS;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Struts.xml

 <action name="add" class="cn.sxt.action.UserAction"><result name="input">/add.jsp</result><result>/success.jsp</result></action>

Jsp

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>数据校验</title>
</head>
<body><form action="add.action" method="post">
用户名:<input type="text" name="name"/><s:fielderror fieldName="name"></s:fielderror><br>
密码:<input type="password" name="pwd"/><s:fielderror fieldName="pwd"></s:fielderror><br>
年龄:<input type="text" name="age"/><s:fielderror fieldName="age"></s:fielderror><br>
<input type="submit" value="提交"/>
</form>
</body>
</html>

总结

实现 action 处理类中的数据校验有3个步骤:

  1. 在处理类中重写validate方法,并将验证规则写在这个方法中
  2. 在action的配置中,加上结果为input的配置
  3. 在jsp页面中,需要使用struts2的<s:fieldError>标签显示错误信息

注意:web.xml中设置成 /* 的形式,要不然进不了action

5. 在struts2中通过validate方法来验证数据会有这样的问题:即,当一个Action中处理方法比较多时,所有的验证方法都放入validate中将会不合适。

如果有多个处理方法需要验证,那么需要为每个方法都添加其相应的验证方法。规则为处理方法前加validate并且将处理方法首字母大写。如:处理方法为 add , 那么器验证方法为 validateAdd() ;这样在执行 add.action 时会先执行 validateAdd() ,再执行 validate() ,再执行add() ; 也就是说,当一个Action处理类中有多个处理方法时,需要分别为每个方法添加对应的验证方法。

UserAction

public class UserAction extends ActionSupport{private String name;private String pwd;private int age;public void validateAdd(){System.out.println("执行validateAdd");if(name==null||name.length()<4){//验证不通过this.addFieldError("name", "输入的用户名不合法");}if(pwd==null||pwd.length()<6){this.addFieldError("pwd", "输入的密码长度不合法");}if(age<0||age>256){this.addFieldError("age", "输入的年龄不合法");}}/*** 在validate方法中 进行数据校验* 在validate方法中 如果没有添加错误信息,那么验证通过*/public void validate() {System.out.println("执行validate方法");}public String add() throws Exception {System.out.println("执行add");System.out.println("name="+name);System.out.println("pwd="+pwd);System.out.println("age="+age);return Action.SUCCESS;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

 

6. 由于验证数据的规则随着系统需求可能会发生变更。如果采用硬编码的方式来验证数据,那么规则发生改变时,需要从新编写代码。有可能会引入新的bug进入系统。这种方式不是很好,所以struts2除了编程验证外还提供了一种验证框架来进行数据校验。

 7. Struts2校验框架的使用:

  a) action所在包下提供一个验证配置文件即可,名称为actionName--validation.xml

  b) 在配置文件中需要为每个表单域提供验证规则

  c) 处理类要继承ActionSupport

验证规则:

<validators><!-- 一个field表示验证一个表单域 --><field name="name"><!-- field-validator 表示验证器  struts2提供了很多默认的验证器--><field-validator type="requiredstring"><param name="trim">true</param><message>请输入用户名</message></field-validator><field-validator type="stringlength"><param name="minLength">4</param><param name="maxLength">10</param><message>用户名在${minLength}到${maxLength}之间</message></field-validator></field><field name="pwd"><field-validator type="requiredstring"><param name="trim">true</param><message>请输入密码</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><message>密码最少是6</message></field-validator></field><field name="age"><field-validator type="required"><message>必须输入年龄</message></field-validator><field-validator type="int"><param name="min">1</param><param name="max">256</param><message>年龄必须在1到256之间</message></field-validator></field>
</validators>

上面struts2的校验框架知道即可

转载于:https://www.cnblogs.com/Vincent-yuan/p/11154682.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sdk开发包如何使用_SDK如何使能行业?华为昇腾要用软件充分释放硬件性能

谈及落地&#xff0c;软件永远是激发硬件性能的核心。自AI出现&#xff0c;围绕传统产业“智能化转型”的探讨就一直没有停下。而随着“新基建”口号的喊出&#xff0c;工业制造等场景的智能化进程更是被加上了助推器。以智能制造为例&#xff0c;依据Markets报告所预计的&…

vue入门:(组件)

模板&#xff1a;&#xff08;template&#xff09;模板声明了数据和最终展现给用户的DOM之间的映射关系。初始数据&#xff1a;&#xff08;data&#xff09;一个组件的初始数据状态。对于可复用的组件来说&#xff0c;通常是私有的状态。接收外部参数&#xff1a;&#xff08…

鹿邑2021高考成绩查询,鹿邑中考成绩查询2021

2021鹿邑中考成绩查询时间方法&#xff1a;91中考网消息&#xff1a;2021年鹿邑中考即将开始&#xff0c;在中考后&#xff0c;广大考生最关心的无疑就是中考成绩查询方法、鹿邑中考成绩什么时候公布&#xff1f;&#xff0c;根据往年经验&#xff0c;小编收集整理了2021鹿邑中…

excel删除行 uipath_学会这8个Excel神技巧,轻松告别零基础!

无论你是个学生还是职场中人&#xff0c;谁不知道Excel呢&#xff1f;尤其是办公一族&#xff0c;总是不可避免会使用到Excel。下面小电就向大家介绍8个神技巧&#xff0c;让你的工作量大大减少&#xff01;那什么技巧有如此威力呢&#xff1f;想必有些大家都用过的&#xff0c…

IIS7.5下的asp.net网站不能连接数据库

今天报了一错就是"找不到Table[0]" 感觉是没有连到数据库。 处理方法&#xff1a;把连接字符串由windows身份验证改成 sqlserver验证就好了 我不知道为什么这么做&#xff01;等待高手给我解答转载于:https://www.cnblogs.com/master-zhu/archive/2010/07/20/17810…

jq在html中添加dom元素,使用jQuery添加DOM元素的最佳方法

所以我已经看到了三种向页面添加html/DOM元素的方法.我很好奇他们每个人的利弊是什么.1 - 传统的JavaScript我相信直接的JS方法是通过构造每个元素,设置属性,然后附加它们.例:var myRow document.createElement("tr");myRow.class "myClass";var firstTD…

qt 5编程入门(第2版)_《C++并发编程实战第2版》第六章:设计基于锁的并发数据结构(1/3)...

本章主要内容设计并发数据结构的含义设计指南并发数据结构的示例实现在上一章中我们了解了底层原子操作和内存模型。本章我们先把底层的细节放一放(尽管在第7章我们将需要它们)&#xff0c;探讨一下数据结构。为编程问题选择数据结构可能是整个解决方案的关键部分&#xff0c;并…

数据I/O流

文件输出流的应用。定义如下字符串&#xff1a;String str “12345abcdef#%&*软件工程”;编写程序将该字符串写入文件”data.txt”。package homework;import java.io.*;public class IO { public static void main(String[] args) throws IOException{ // TODO Auto-gene…

转学到斯坦福大学计算机专业,斯坦福大学转学申请条件有哪些?

斯坦福大学转学申请条件有哪些&#xff1f;据托普仕小编了解&#xff0c;斯坦福大学(Stanford University&#xff0c;简称Stanford)位于美国加州旧金山湾区南部的帕罗奥多市(PaloAlto)境内&#xff0c;临近世界著名高科技园区硅谷&#xff0c;是世界著名私立研究型大学。斯坦福…

计算机应用技术面试的礼仪和技巧,远程复试下,这些面试礼仪一定要注意!

已有高校官宣考研复试采取线上面试的形式&#xff0c;那么如何在远程面试中给导师留下礼仪得体的好印象呢&#xff1f;帮帮为大家准整理了线上复试礼仪&#xff0c;快来了解下吧~面试前期准备一、面试前做好面试设备技术检查。如果采取线上复试的形式&#xff0c;稳定的网络环境…

在网格中查找一个点的领域点

简介 在网格中查找这个点的领域节点。 代码 #include <iostream> #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh> using namespace std; typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh; int main(…

查找一个顶点的一层领域边

简介 查找一个顶点的一层领域边 代码一 这个代码使用了太多的auto&#xff0c;其实不利于阅读&#xff0c;代码二&#xff0c;把auto更改了。 #include <iostream> #include <vector> // -------------------- OpenMesh using namespace std; #include <OpenMes…

html控制按钮里面的文字,有谁可以告诉我web网页制作中通过三个按钮控制页面上的一段文字放? 爱问知识人...

先下载jquery-1。2。6。pack。js&#xff0c;包含到文件中EnlargeFont-size:12pxSmallAndy Moor – Fake Awake (Eco mix) (Anjunabeats)Humate – Love Stimulation (Glenn Morrison & Bruce Aisher mix) (Poker FlatEnlargeFont-size:12pxSmallAndy Moor – Fake Awake (…

git两个账号切换_Git切换账号方法

Windows修改Git账号 打开控制面板(Win+s快捷键),输入:control 命令行:control 凭证管理器 使用[凭证管理器]修改git账号: 全局范围修改账号 运行git config --global选项:$ git config --global user.name "John Doe" $ git config --global user.email "j…

河海大学计算机学硕导师选择理由,研导师:河海大学统计学考研经验

原标题&#xff1a;研导师&#xff1a;河海大学统计学考研经验写给考研上河海大学的同学们&#xff0c;研导师为大家整理总结一下河海大学统计学考研经验&#xff0c;希望对你们有帮助。初试科目&#xff1a;①101 思想政治理论②201 英语一③616 数学分析④861 高等代数复试科…

查找一个顶点的一层领域面

简介 查找一个顶点的一层领域面 代码 #include <iostream> #include <vector> // -------------------- OpenMesh using namespace std; #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh> #include <…

gv推了sweethearts_3HAC0373-1

3HAC0373-13HAC0373-13HAC0373-1-------------------------------------------------------------------------------------北上广不相信眼泪黑吉辽不相信喝醉江浙沪不相信邮费陕甘宁不相信水费京津翼不相信好肺福建宇创不相信货贵找我买产品不相信服务不到位&#xff01;&…

查找一条边的领域顶点 总觉得不完善

简介 查找一条边的领域顶点 代码 #include <iostream> #include <vector> #include <algorithm> // -------------------- OpenMesh using namespace std; #include <OpenMesh/Core/IO/MeshIO.hh> #include <OpenMesh/Core/Mesh/TriMesh_ArrayKerne…

计算机的应用数据处理,计算机的应用领域:数据处理(或信息处理)

计算机的应用领域:数据处理(或信息处理)发布时间&#xff1a;2008-07-14发布时间&#xff1a;2008-07-14 | 【打印】 【关闭】数据处理是指对各种数据进行收集、存储、整理、分类、统计、加工、利用、传播等一系列活动的统称。据统计&#xff0c;80&#xff05;以上的计算机主…

hiveserver2 和beeline_Hive-cli与Beeline的区别

Hive-cli与Beeline的区别hive-cli 是hive连接hivesever的命令行工具&#xff0c;从hive出生就一直存在&#xff0c;但随着hive功能的增强、bug的修复、版本升级&#xff0c;hive-cli结构的局限性跟不上hive的发展&#xff0c;如果强行更改就不能满足向下兼容&#xff0c;就出现…