Struts2学习(五)—表单验证

Struts2框架之xml声明式表单验证与错误回显 在上一篇博客 Struts2框架之Action中进行表单验证,讲解了如何在Action类中进行表单验证,本篇博客将讲解一下如何使用xml声明式的方法进行表单验证。 1、注意:\color{red}注意:注意: 使用xml声明式的方法进行表单验证需要导入struts2中的xwork-core的jar包,不过在2.5的版本中将xwork-core与struts2-core的jar包进行了包,无需再次单... 阅读详情

上一篇我们学习了struts2中的表单提交数据,我们注意到在我们输入数据时,我们并没有在HTML上编写JavaScript用于输入数据的验证
我们先看下面的一个例子
这里写图片描述
注意看,我们在age文本框中输入了字符 ,我们知道age 是int类型的此时输入了string类型的数据会怎么处理呢?
提交表单,出现了异常:
这里写图片描述
注意看异常信息
上面说返回了input 而我们的reslult没有定义
如果Struts 2返回”input”表明在表单输入无效如何处理? 在大部分情况下我们想重新显示包含表单的web页面并包含用户在表单输入数据和如何错误的信息 .

要处理返回值 “input” 我们需要在struts.xml 中action 下添加如下的结果 .

<result name="input">/register.jsp</result>

上面的result 节点在 success result节点之后,在 register action 结束之前.
添加之后 ,我们可以看到 在有错误的情况下提交表单,struts2会根据我们配置的input中的jsp进行转发
这里写图片描述
由于当验证失败时 Struts 2将返回 input, Struts 2 框架将重新显示register.jsp. 由于我们使用Struts 2表单标签, Struts 2 将自动添加错误消息. 这些错误消息是我们在 addFieldError方法调用中指定. 该 addFieldError方法有两个参数. 第一个参数是错误应用的表单字段 而第二个参数是显示在表单上面的错误消息.

因而如下的addFieldError方法调用:

addFieldError( "personBean.firstName", "First name is required.")

将导致消息”First name is required” 在firstName 表单字段上显示.
validate方法
Struts 2调用 validate方法, 验证失败, register.jsp 将显示错误消息.
美化错误消息
Struts 2 s:head 标签用来提供包含美化错误信息的CSS . 添加 到 register.jsp 在HTML 标签后. 和上面相同的步骤你将看到如下效果:
这里写图片描述
重写validate方法
我们可以在action 类Register中重写validate方法,

@Override
    public void validate() {
        // TODO Auto-generated method stub
        super.validate();
        if (personBean.getFirstName().length() == 0) {
            addFieldError("personBean.firstName", "名字不能为空");
        }
        if (personBean.getLastName().length() == 0) {
            addFieldError("personBean.lastName", "名字不能为空");
        }
        //邮箱可以为空 ,当不为空时验证
        if (personBean.getEmail().length() != 0) {
            if (!personBean.getEmail().matches("\\w+@\\w+(\\.\\w+)+")) {
                addFieldError("personBean.email", "邮箱不是一个合法邮箱!!");
            }
        }
        if (personBean.getAge() < 18) {
            addFieldError("personBean.age", "年龄不能小于18岁");
        }

此时,我们在输错的时候会提示:
这里写图片描述
我们还可以在action类中定义 validateExecute方法

public void validateExecute(){
        if (personBean.getFirstName().length() == 0) {
            addFieldError("personBean.firstName", "名字不能为空");
        }
        if (personBean.getLastName().length() == 0) {
            addFieldError("personBean.lastName", "名字不能为空");
        }
        //邮箱可以为空 ,当不为空时验证
        if (personBean.getEmail().length() != 0) {
            if (!personBean.getEmail().matches("\\w+@\\w+(\\.\\w+)+")) {
                addFieldError("personBean.email", "邮箱不是一个合法邮箱!!");
            }
        }
        if (personBean.getAge() < 18) {
            addFieldError("personBean.age", "年龄不能小于18岁");
        }
        System.out.println("validateExecute 方法----------------------");
    }

在validate方法中添上:

System.out.println("validate 方法 ---------------  ");

我们看到:
这里写图片描述
控制台输出:

validateExecute 方法----------------------
validate 方法 ---------------  

两个方法都起到了验证的作用
还有一个方法也可以起到验证作用:

public void validateDoExecute(){
        if (personBean.getFirstName().length() == 0) {
            addFieldError("personBean.firstName", "名字不能为空");
        }
        if (personBean.getLastName().length() == 0) {
            addFieldError("personBean.lastName", "名字不能为空");
        }
        //邮箱可以为空 ,当不为空时验证
        if (personBean.getEmail().length() != 0) {
            if (!personBean.getEmail().matches("\\w+@\\w+(\\.\\w+)+")) {
                addFieldError("personBean.email", "邮箱不是一个合法邮箱!!");
            }
        }
        if (personBean.getAge() < 18) {
            addFieldError("personBean.age", "年龄不能小于18岁");
        }
        System.out.println("validateDoExecute 方法----------------------");
    }

经验证当三个方法都存在时
控制台打出:

validateExecute 方法----------------------
validate 方法 ---------------  

说明validateDoExecute 方法没调用,当把validateExecute 方法去掉时控制台输出:

validateDoExecute 方法----------------------
validate 方法 ---------------  

调用了两个方法
总结
看了上面的三个方法,在具体使用时,使用哪个比较好呢,个人推荐使用
validate+XXX方法,如validateExecute()方法,因为,在一个action中有可能我们会写多个方法
如在用户管理的action中 我们可能也会写上退出和注册的方法
在UserAction中有两个方法 :login() 和 logout() register(),在登录时需要验证,注册同样需要验证,二两者的验证方式又不一样 那么使用validate方法就不太适合了,而使用validateLogin 和validateRegister分别进行登录和注册验证则非常适合
使用validate()方法还有一个缺点,那就时在进行不需要验证的logout()方法,他也会进行验证
还是上面的例子:我们在register 类中 写一个

public String logout(){
        return SUCCESS;
    }

先把validateExecute()和validateDoExecute()方法注释
并在struts.xml中


        <action name="logout" class="com.lgh.struts2maven.action.Register" method="logout">
        <result name="success">/logout.jsp</result>

        </action>

在thankyou.jsp页面添加退出链接

<a href="<s:url action='logout' />"> 退出</a>

这时,输入数据提交,后的界面是
这里写图片描述
我们点击退出
这里写图片描述
我们看到错误在register类中的34行
这里写图片描述
我们可以很轻易的判断出空指针异常的原因,但是这时我们想的是,lagout根本不需要进行验证,但是它还是执行了验证方法
,这是我们不需要的,
解决的方法:
(1)、在不需要进行验证的方法加上annotation,即在方法前加上@SkipValidation

    @SkipValidation
    public String logout(){
        return SUCCESS;
    }

加上了注解,当我们执行action调用该方法时,会忽略验证的
这时重启项目执行logout
这里写图片描述

(2)、不使用validate()方法,使用validateXXX方法,验证针对具体的某个方法,这样,也可以解决该问题

Codex,Copilot 是什么 GitHub Copilot是什么 **GitHub Copilot** 是一款由 **GitHub** 和 **OpenAI** 合作开发的 **AI 代码辅助工具**,它基于 **OpenAI Codex 技术**,能够根据上下文自动生成代码建议,大幅提升编程效率 阅读详情

相关推荐

TEC控制器芯片 ADN8835 中文数据手册

ADN8835是一款高集成度的单芯片TEC控制器。它包括线性电压调节模块脉冲宽度调制(PWM) 电压调节模块和两个零漂移、轨到轨斩波放大器。线性控制器和PWM驱动器用于控制H桥配置中的内部功率MOSFET。通过测量热传感器反馈电压,并使用集成的运算放大器作为比例-积分-微分(PID)补偿器来调理信号,ADN8835通过TEC驱动电流,将连接至TEC模块的激光二极管或无源组件的温度稳定到编程的目标温度。

lu2289504634的博客 9532

Struts2学习(五)—表单验证 XML

简介在本实例我们包含如何验证在表单字段输入使用 Struts 2的 XML验证技术.在 之前的学习中我们讨论了在Action类的validate方法进行表单验证. 使用分离的 XML验证文件可以使用 Struts 2 框架内置的验证器的验证能力.之前我们学习了在代码写验证,但是如果验证规则变了,要修改代码,不灵活,因而struts2提供了基于xml验证规则,使用struts的内置验证器来执行验证使用

mingxin95的博客 1006

STM32驱动WS2812B实现音乐频谱可视化系统

本文详细介绍了基于STM32驱动WS2812B灯带实现音乐频谱可视化系统的设计与实现。通过FFT算法实时分析音频信号,将频谱映射到炫彩灯光控制系统,结合PWM和DMA技术实现低延迟响应。系统支持多模式切换和动态亮度调节,适用于创意灯光秀和智能家居场景。

weixin_29171129的博客 301

Struts2表单验证提交报错

填个小坑花了这么长时间真的好吗将要提交的表单edit.jsp:&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; &lt;%-- Created by IntelliJ IDEA. User: joey Date: 18-1-18 Time: 下午7:27 To change this template use File | Se...

么凹大人的博客 590

Transformer时序预测避坑指南:TFT在风电场的5个实战经验

本文分享了Temporal Fusion Transformer在风电场功率预测中的五个实战经验,涵盖数据预处理、模型调优、显存优化、注意力机制解读及在线部署。针对风电数据噪声大、概念漂移等挑战,提供了从构建数据质量标签到高效超参调优的具体方案,并强调利用Transformer架构的可解释性进行业务洞察,助力实现稳健的工业级时序预测。

bert9linguist的博客 461

Ubuntu视频播放器怎么选?VLC、mpv、SMPlayer硬解与字幕配置指南

在Linux系统中,视频播放体验取决于播放器、解码器与显卡驱动的协同。硬件解码通过VA-API或VDPAU将解码任务交给GPU,能显著降低CPU占用,解决4K高码率视频卡顿问题。对于Ubuntu用户,合理配置解码环境与播放器,可流畅播放HEVC、多音轨及ASS特效字幕视频。无论是日常观影、番剧追更还是家庭影院场景,选择合适的播放器并正确启用硬解,都是提升体验的关键。本文围绕Ubuntu平台,详解VLC、mpv、SMPlayer等播放器的安装、硬解配置与常见问题排查,帮助你在Linux上获得流畅的本地视频播放

weixin_33801856的博客 505

15 - Struts2 学习(5)— struts2表单验证

1 服务端 Action验证 1.1 方法1 public class UserAction extends ActionSupport implements ModelDriven<User> { private User user = new User(); @Override public User getModel() { retur...

一角残叶的博客 421

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

struts2表单验证及国际化实现

一.  struts2表单验证的两种形式:1.Aciton类重写ActionSupport类的validate()方法:    public void validate(){        if(getUsername() == null || getUsername().trim().equals("")){            addFieldError("username", getText("username.required"));//getText("username.required")是调

hjjzhangkui的专栏 1264

【EB_Tresos专题】-06-配置一个UDS诊断DID

<--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ...

「汽车电子助手」的博客 4085

【MATLAB代码】基于水声通信(ACOMMS)下的到达时间差(TDOA)定位的AUV自主导航例程,附完整代码

水下AUV导航系统仿真研究 本研究基于到达时间差(TDOA)技术实现了水下自主航行器(AUV)的三维导航仿真系统。系统采用四个声学信标作为定位基准,通过TDOA测量数据迭代求解AUV位置。仿真结果表明: 导航性能:系统能够有效跟踪AUV从起点(30,30,-20)到目标点(70,70,-20)的航行轨迹,定位误差保持在合理范围内。 误差分析:定位误差变化曲线显示系统具有稳定的定位精度,平均误差为0.5米左右。 技术特点:采用两步最小二乘迭代算法求解非线性TDOA方程,提高了定位精度和计算效率。 该仿真系统为

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 320

利用struts2的Interceptor来使struts2的表单验证框架返回json格式的fieldErrors信息

fieldErrors是ActionContext里的一个东西,使用Struts2的表单验证框架时,会自动将验证结果的错误信息放到里面,非AJAX情况下,可以直接在页面上方便地使用Struts2的标签库来读取显示这些错误信息,但是若是AJAX方式与服务器异步交互,则Struts2只会将Action中设置了getter方法的属性打包成json格式的数据返回给前端。 若使用重载Action中validate方法的办法,可以不使用addFieldError()方法而直接将错误信息放入到自定义的一个属性中从而返回

Ijse技术博客 4266

Unreal5从入门到精通之如何在VR中使用3DUI

前面我们讲过《Unreal5从入门到精通之UMG的使用》一般制作游戏时,UI都是添加到屏幕视窗上面的,但是在制作VR时,我们往往需要制作一个3D的UI,放置在场景中,然后使用手柄的射线来和UI进行交互。今天我们就来讲解下,如何在VR中创作和交互3DUI首次操作会感觉好复杂,多多练习,当你熟悉了UE蓝图的操作后会发现,这只是一个常规的蓝图操作而已。祝大家在虚幻的学习过程中非常顺利。希望这篇博客对你有所帮助。

TxNet 1984

Struts2学习笔记2 ――表单验证

Struts2学习笔记2 ――表单验证针对上面的login.jsp页面使用Validator验证,验证username和password两个表单的内容不能为空。首先在LoginAction所在的包org.rainlife.struts2.action中建立一个名为LoginAction-validation.xml的Validator验证文件: xml version="1.0

楓雨人生 8165

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

struts2 表单验证

Javascript校验的局限性

minihoop的博客 556

STM32F407中文手册

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

struts2表单验证初步及国际化实现(学习总结)

struts2表单验证初步及国际化实现(学习总结) struts2表单验证的两种形式:1.Aciton类重写ActionSupport类的validate()方法: public void validate(){ if(getUsername() == null || getUsername().trim().equals("")){ ad...

ajwh64482的博客 203

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

struts2 学习

文章目录Struts基础hello struts练习 访问hello跳转hello.jsp显示数据到JSP练习 访问/showTime跳转showTime.jsp并且显示当前时间提交数据到action流程练习解决struts中文问题STRUTS 启动失败,出现错误ERROR FILTERSTART 应该如何调试关闭日志request与responsesession上传文件上传文件最大值标签form...

gsdad_white的博客 1155

Struts2表单验证

一、struts2.0的输入验证: A、手动验证:1)重写validate()2)重写validateXxx() B、使用验证框架 Action类都要继承ActionSupport类二、为一个Action设置多个逻辑处理: 为了更具有针对性的处理业务逻辑与针对性的进行输入校验,可以采用指定业务逻辑处理方法的方法,即对同一个Action设置多个逻辑处理方法,也就是说对于某个表单,我们可以指定在Action中让哪个方法来处理它的相关业务 解决方法:struts.xml中通过method属性指定处理其逻辑的方法 

java闲扯淡 3168

心得:Struts2 表单验证

心得:Struts2 表单验证:

Be_Proud的博客 564

struts 表单验证

 表单数据验证主要分为数据格式上的合法性验证和逻辑上的有效性验证。例如,填写登录信息时要求必要的字段不能为空,这属于数据格式上的合法性验证,可以在服务器端进行、也可使用JavaScript等脚本程序在客户端实现。逻辑上的有效性验证,一般是对通过数据格式检查的用户身份信息进行验证、例如:判断是否为合法用户,通常在服务器端进行。在服务器端:实现身份验证应用程序的表单数据格式验证1.修改配置文件

我心飞翔的专栏 1002

struts2表单验证

struts2表单验证

wanglihuhappy的专栏 157

Struts2-表单验证的两种方式

1. Struts2中的输入校验 2. 编码方式校验   1) Action一定要继承自ActionSupport   2) 针对某个要进行校验的请求处理方法编写一个 public void validateXxx()方法,在方法内部进行表单数据校验.   3) 也可针对所有的请求处理方法编写public void validate()方法。   4) 在校验方法中,可以通过addF

幻影 2万+

Struts2中的表单及表单验证

//struts表单布局 //默认提交方式:post //自动布局表格样式:table-tr-td,可以加入theme=”simple”取消默认样式 //全局取消表格样式:在struts.xml配置文件中加入<constant name=”struts.ui.theme” value=”simple”></constant>在JSP页面<s:form action="login.action"

北京Java青年 498

如何自定义Struts2表单验证后的错误信息显示格式/样式

如何自定义Struts2表单验证后的错误信息显示格式/样式 2010-07-01 11:01 如何自定义Struts2表单验证后的错误信息显示格式/样式 (s:fielderror,换行,黑点)   前面一段时间学过一些Struts2的知识,感觉Struts2和1.x还是有很大的差别的,我还不好说1.x肯定会过时还是2.0会很快流行,这毕竟是需要作为导向的。 在Struts2...

turnRound 282

struts2表单验证-整合国际化

参考:http://www.cnblogs.com/langlang/archive/2010/01/14/1647627.html 1、Action重写validate方法 public void validate(){ if("".equals(sysUser.name)||!sysUser.name.equals("java")){ ...

diaojiao1933的博客 189
上一篇: Struts2学习(四)—表单处理
下一篇: Java反射机制的学习
mingxin95
博客等级 码龄11年 19粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值