《Java从入门到放弃》框架入门篇:Struts2的常用验证方式(二)

前一回,我们讲完了“直接在功能方法中写验证代码”这种验证方式,接下来,我们继续搞定后续的三种方式。

二、重写validate方法(注意这个方法会验证该类中所有的方法)

    使用重写验证方法的好处就是,又可以少写一句代码了!!!!

2.1)修改Action类,在其中添加valiate方法,把之前写在add方法中的验证代码剪切过来

    //修改后的add方法
    public String add() {
        System.out.println("调用了添加的方法!");
        System.out.println("编号:"+singer.getSingerID());
        System.out.println("姓名:"+singer.getSingerName());
        System.out.println("地区:"+singer.getArea());
        System.out.println("留言:"+msg);
//        if(this.hasErrors()){
//        	return INPUT;
//        }
        return "add";
    }
    //没有写任何返回值,但只要调用了addFieldError方法,则默认返回INPUT
    @Override
    public void validate() {
		//编号必须是六位的数字
    	if(Integer.toString(singer.getSingerID()).length()!=6){
    		this.addFieldError("err_id", "编号必须是6位的数字");
    	}
    	//姓名不能为空
    	if("".equals(singer.getSingerName().trim())){
    		this.addFieldError("err_name", "姓名不能为空");
    	}
    }

2.2)打开对应页面,localhost:8888/strutsDemo/singeradd.action,结果如下:

使用上面这种方法要注意,现在就算访问别的方法(除add外的其他方法),也会调用该验证。

我们在validate方法中加一句代码,来看看效果

    @Override
    public void validate() {
        //新增的一句代码
	System.out.println("调用了验证方法");
	//编号必须是六位的数字
    	if(Integer.toString(singer.getSingerID()).length()!=6){
    		this.addFieldError("err_id", "编号必须是6位的数字");
    	}
    	//姓名不能为空
    	if("".equals(singer.getSingerName().trim())){
    		this.addFieldError("err_name", "姓名不能为空");
    	}
    }

接下来,通过http://localhost:8888/strutsDemo/smng_update.action,调用update方法,可以看到效果如下图:

我们希望每个验证方法只验证其对应的操作,如何解决这个问题呢?这就要用到第三种方式,请Look

三、使用ValidateXxx方法(Xxx对应要验证的方法的方法名)

    在前一种方式的基础上,我们把validate的方法名改成validateAdd,并去掉Override注解,就实现了第三种方法(我就喜欢这样的方式,因为········,不用再贴代码和截图。),大家改完就可以再访问对应的功能试试。

    如果有问题,那就···········自行解决吧,好吧,好人做到底,如果报错,注意看错误提示,

,如果只是查看调用与否,请把两个if语句注释,就可以解决这个问题了。最终结果如下,只有添加方法调用了验证:

至于第四种方式,我们就不在入门篇里讲了,各位看官如果有兴趣,可以先自行研究。

今天的内容这到儿就结束了,是不是很轻松!!! 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术记录

通讯协议序列化解读(一) Protobuf详解教程

前言:说到JSON可能大家很熟悉,是目前应用最广泛的一种序列化格式,它使用起来简单方便,而且拥有超高的可读性。但是在越来越多的应用场景里,JSON冗长的缺点导致...

1024
来自专栏Zephery

工厂模式

工厂模式 目录 何为工厂模式 工厂方法与抽象工厂 如何在Java EE中通过@Producers与@Inject注解实现工厂模式 如何创建自定义注解以及通过@Q...

42711
来自专栏大闲人柴毛毛

Java异常体系中的秘密

相信大家每天都在使用Java异常机制,也相信大家对try-catch-finally执行流程烂熟于胸。本文将介绍Java异常机制的一些细节问题,这些问题虽然很...

37310
来自专栏三丰SanFeng

Linux64位程序移植

1 概述 Linux下的程序大多充当服务器的角色,在这种情况下,随着负载量和功能的增加,服务器所使用内存必然也随之增加,然而32位系统固有的4GB虚拟地址空间限...

2807
来自专栏Kirito的技术分享

警惕不规范的变量命名

就在最近,项目组开始强调开发规范了,今天分享一个变量名命名不规范的小案例,强调一下规范的重要性。 Boolean变量名命名规范 16年底,阿里公开了《Java...

3489
来自专栏前端架构与工程

【译】《Understanding ECMAScript6》- 第七章-Promise

目录 异步编程 Promise基础 链式Promise 多重Promise响应 Promise继承 总结 异步操作是JavaScript最强大的功能之一。Jav...

2006
来自专栏程序员互动联盟

【答疑解惑】C/C++参数传递

有群友问如下一个问题,他说在下图中sun函数内部的打印是对的,但是为什么调用结束之后主调的结果确是错误的。也就是说,函数sun为什么不能把相加的结果带回主调函数...

3656
来自专栏王清培的专栏

.NET项目开发—浅谈面向对象的纵横向关系、多态入口,单元测试(项目小结)

阅读目录: 1.开篇介绍 2.使用委托消除函数串联调用 2.1.使用委托工厂转换两个独立层面的对象 3.多态入口(面向对象继承体系是可被扩展的) 4.多态的受...

20710
来自专栏LhWorld哥陪你聊算法

【Linux篇】--sed的用法

Sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pat...

742
来自专栏闻道于事

Java之初识

今天开始学习Java 1.什么是Java?   Java是1995年由sun公司推出的一门极富创造力的面向对象编程语言,是由Java之父詹姆斯格斯林博士设计的。...

3458

扫码关注云+社区

领取腾讯云代金券