ActionForm中validate()方法 -- 一个细节

今天写struts1.3.8。出现一个问题,让我琢磨了好长时间。

往常写login是独立出来的,针对login功能有独立的LoginForm和LoginAction,在LoginForm中可以用validate()进行表单验证(虽然不如用js+正则表达式进行表单验证更有效,但也算是提供了一种思路)。validate()验证通过,struts-config.xml才会根据type跳转到LoginAction去执行execute()方法,否则讲转向错误显示页(input指定的页面)。

这次我把login和对user的CRUD操作写在同一个action中(共用一个ActionForm、Action和struts-config.xml配置区块),这就出现问题,在验证成功后,对user进行CRUD操作时总是无法跳转到指定页面,而跳转到错误页面。后来查到了错误原因(进行CRUD操作时用于登陆表单验证的validate()方法也会被调用, 而此时表单已经为空值了, 所以validate()无法通过),又在网上找了些详细解释。贴出来大家共享:

ActionErrors类似与一个Map,存放着若干个ActionMessage(ActionError已不推荐使用)对象,每个ActionMessage都有个key,类似于一个Cookie,每个ActionMessage都含有一小段验证错误信息。

ActionErrors继承与ActionMessages,其中封装了若干条错误信息,他含有一个方法add(String property,ActionMessage message)。

ActionMessage存放的错误信息为一个String,且来源于资源文件。在new一个ActionMessage来封装异常信息时,存放的是key(资源文件中的key,key的value在资源文件中)。

struts提供了标签来显示整个ActionErrors的错误信息。但要在struts-config.xml中设置(input属性指定校验出错时所跳转的页面)。

若ActionErrors对象为null或者其中没有ActionMessage,则验证成功 --> 跳转到type指定的Action中执行execute方法。

若ActionErrors对象中有至少一个ActionMessage,则失效 --> 跳转到input指定的jsp页面。

显示所有的错误信息,可以在jsp页面中用来配置显示userName的错误信息。

出错显示的步骤:
1-->查找errors.add("userName",message);中的userName得到相应的message对象
2-->message=new ActionMessage("errors.name");得到key为errors.name
3-->在资源文件中查找key为errors.name所对应的value值
4-->在出错页面上显示value值。

我是菜鸟,刚开始正式搞struts,先从经典的struts1做起,再转struts2。

你可能感兴趣的:(struts)