Struts2 数据输入校验(1) —— 函数验证
用struts2标签库来实现上述目的的基本原理:
错误消息分为field级和action级,都在ActionSupport类中预定义了,不同的是,
fieldError是通过一个Map来实现,事实上记录了field的名字和错误信息,因此能在页面上对应的field中显示;
而actionError是通过一个Collection实现,没有记录报错的来源,只记录了错误信息。
?
?
如果有错误返回,错误信息会在页面上提示
在Action中所有addFieldError()设置的信息将在对应的field位置显示;
在Action中所有addActionError()设置的信息将不会显示,除非在页面中定义了s:actionerror控件,那么错误将以ul的格式显示。
?
?
?
对多验证和跳转逻辑的支持
对于一些Action如果需要重用,struts也提供了支持。
上述[*]处,你也可以指定其它任意的名字,这需要在struts.xml中修改对应action的method属性
<action?name="XXXAction"?class="com.myspace.myname.XXXAction"?method="newExcuteName">
??????<result>success.jsp</result>
</action>
?
同时在XXXAction中我们需要定义一个方法
public?String?newExcuteName(){??/*dummy?code*/?}
如果同时还定义了
public?void?validateNewExcuteName(){??/*?dummy?code?*/?}
那么在执行validate()之前,程序会先执行validateNewExcuteName()方法
可以考虑把所有公用的验证逻辑放到validate()方法中
上述过程完全是靠java反射机制实现的,效率会低一些,所以除非真有必要,否则不用。
?
错误提示字符串的本地化
在validator方法中直接写错误信息固然方便,但不算是一个好习惯,同时也不能支持本地化。下面简单说明本地化的两种方式
1、全局国际化默认的错误提示,首先在struts.xml中加入常量
然后在与struts.xml同级的位置建立message.properties中写入
?
2、针对某个Action的验证错误提示
在与XXXAction同级目录下建立与该Action同名的属性文件
XXXAction.properties中写入
http://www.blogjava.net/bacon/archive/2009/02/01/252888.html