前一回,我们讲完了“直接在功能方法中写验证代码”这种验证方式,接下来,我们继续搞定后续的三种方式。
二、重写validate方法(注意这个方法会验证该类中所有的方法)
使用重写验证方法的好处就是,又可以少写一句代码了!!!!
2.1)修改Action类,在其中添加valiate方法,把之前写在add方法中的验证代码剪切过来
123456789101112131415161718192021222324 | //修改后的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方法中加一句代码,来看看效果
12345678910111213 | @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语句注释,就可以解决这个问题了。最终结果如下,只有添加方法调用了验证:
至于第四种方式,我们就不在入门篇里讲了,各位看官如果有兴趣,可以先自行研究。