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提供了<html:errors/>标签来显示整个ActionErrors的错误信息。但要在struts-config.xml中设置<action ... input="reg.jsp">(input属性指定校验出错时所跳转的页面)。

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

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

<html:errors/>显示所有的错误信息,可以在jsp页面中用<html:errors property="userName"/>来配置显示userName的错误信息。

出错显示的步骤: <html:errors property="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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值