struts2.0输入校验

本文详细介绍了Struts2框架中的输入校验机制,包括字段级校验和操作级校验两种方式,并探讨了如何自定义错误信息及在不同场景下的应用。

sturts2.0的输入校验分为field校验和action校验两种

一、filed校验(map实现)

1.在Action类中重写validate方法,编写自己的校验判断

    this.addFieldError(String fieldName, String errorMessage)向页面中的属性添加错误信息

2.在struts.xml里面配置校验失败跳转的页面,即配置input属性。

3.显示错误信息

  1)如果信息的输入采用普通的输入框,添加<s:fielderror></s:fielderror>标签即可显示出错误信息。

  2)如果使用struts的标签,则会自动在错误页面显示错误信息。

同时struts如果类型转换失败也会自动为我们产生错误提示信息,但不够友好。这是我们可以自己编写信息替换struts自动生成的错误信息。

1.全局替换

  首先在struts.xml里配置 <constant name="struts.custom.i18n.resources" value="baseName"/>,对应的需要在类路径下编写一个名字与value值相同,后缀为properties的资源文件:baseName.properties。

  里面内容为:xwork.default.invalid.fieldvalue={0}想要提示的错误信息。这时struts会用此资源文件里配置的信息替换默认的错误提示。

  缺点:此时错误信息还是相对简单,不够友好。

2.局部替换

  在需要校验的类的相同目录下编写名字与类相同,后缀为properties的资源文件:ClassName.properties。

  文件里内容为:invalid.fieldvalue.fieldName=错误提示信息。filedName为需要替换的属性名字。这样可以实现错误信息的精确控制。

注意:即使类型转换失败,它也会执行validate方法。在自动类型转换时,对int类型的属性,如果转换失败,会把属性值设为0;对对象类型的属性,类型转换失败会把值设为null。所有此时可能会出现一个属性多个错误信息的情况。

 

二、Action级别(Collection实现)

  其实与field级别类似,只是使用addActionError(String anErrorMessage) 方法添加错误信息。

  此时错误信息在页面的显示使用标签:<s:actionerror/>。

  这时可能会出现既有field级别的提示,也出现action级别的错误信息提示。如果只希望出现action级别的提示(ActionError),可以将struts标签的theme属性设置为:simple,这时将将不会用表格封装数据,不会有struts默认产生的错误提示,label属性的值也不会显示。

 

三、对类似struts1.x的DispatchAction的校验

  在struts1.x中有DispathcAction,可以在一个类中编写多个方法。同样,在struts2.x中也提供了类似功能。

  1)方法和execute完全一样,只是方法名不一样,类似代码如下:

     public  String methodName()  throws  Exception {
        
return  SUCCESS;
    }

 

   要调用此方法只需在struts.xml文件中指定method属性的值。

  2)此时,不同的方法可能有不同的校验方式,此时可以为此方法指定它所特有的校验方法。

    方法命名规则为“validate + 首字母大写的方法名”,如下:

     public   void  validateMethodName() {
        
super .validate();
    }

 

   3)但这时如果自己重写了validate()方法,它在执行完validateMethodName()校验方法后,还会执行validate()方法,这时有两个解决办法:

      a.不重写validate方法

      b.将validate方法名改为:validateExecute()

 

总结:输入校验方式的选择要么使用field级别的,要么使用action级别的,不要两者混用。

转载于:https://www.cnblogs.com/xiaoyayaday/archive/2009/12/13/1623155.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值