《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 条评论
登录 后参与评论

相关文章

来自专栏CDA数据分析师

Python中eval带来的潜在风险,你知道吗?

00 前言 eval是Python用于执行python表达式的一个内置函数,使用eval,可以很方便的将字符串动态执行。比如下列代码: >>> eval("1+...

3728
来自专栏java思维导图

一张思维导图教你使用google一下

导图总览 ? google搜索技巧.png 双引号 代表完全匹配搜索 也就是说搜索结果返回的页面包含双引号中出现的所有的词,连顺序也必须完全匹配 例如搜索"ja...

3365
来自专栏机器学习算法与Python学习

笔记 | 史上最全的正则表达式

原文:http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html 点击文末阅读原文即可 很多不太懂正...

29611
来自专栏iOS开发笔记

iOS最全的常用正则表达式大全

很多不太懂正则的朋友,在遇到需要用正则校验数据时,往往是在网上去找很久,结果找来的还是不很符合要求。所以我最近把开发中常用的一些正则表达式整理了一...

2956
来自专栏Golang语言社区

Golang语言 与 C 语言 的比较学习

对于MarkDown 编译器没有自动保存功能这件事情, 我表示严重的厌恶。 一个来小时的整理化为乌有,而且居然还不能导入到HTML编辑器, 真是无法忍受! 关键...

3137
来自专栏LinXunFeng的专栏

iOS - 揭露Block的内部实现原理

1255
来自专栏九彩拼盘的叨叨叨

JavaScript 严格模式介绍

如我们所知,JavaScript 是一门灵活的语言。其灵活性同样也带来了很多坑,当然也有一些是设计缺陷。比如

822
来自专栏Crossin的编程教室

囚徒问题解答

前天提出了一个关于囚犯排队报数,谁能留到最后的问题: 一道囚徒问题 有人看出来,这是“约瑟夫环”问题的改编版,在网上可以搜到原版的问题,和很多种解法。 这里说一...

2749
来自专栏智能算法

Python学习(一)---- Python基础必备

https://blog.csdn.net/fgf00/article/details/52061971

1263
来自专栏java学习

Java每日一练(2017/6/25)

Java基础 | 数据库 | Android | 学习视频 | 学习资料下载 最新通知 ●回复"每日一练"获取以前的题目! ●【新】Ajax知识点视频更新了!(...

31410

扫码关注云+社区