穿越之东方不败是我爹:struts2学习笔记(6)——输入校验(2)

来源:百度文库 编辑:中财网 时间:2024/04/28 22:55:18

上次做了一个简单的验证示例,但是你会发现,每次提交后,数据就没了,如果某一项输入错误会导致整个表单都得重填,这是一件非常恐怖的事。

要实现提交后数据还保留,可以使用两种方法来实现。

记住,struts2是基于请求转发的。

可以通过在表单中指定输入框的value来实现,

value="${requestScope.username}" />

前面已经提到,struts2是基于请求转发的,所以可以获得之前输入的数据。

第二种方法就是用struts2的标签库。


   
   
   
   
   
   
   

但是输入如下信息时,显示效果如图所示 


 

显然这种效果并不好,struts2提供了自定义主题的功能,即在标签中增加属性theme="simple"
如:



也可以放在form标签中,那么整个表单将采用此样式,然后就可以把这些标签放在表格中。

至于错误信息可以放在action级别的error中。

即在validate方法中,将验证错误信息通过addActionError显示出来,此方法只接受一个参数,即出错的信息。

struts2 默认表单中只能显示fielderror,为此,要将出错信息显示出来,必须在页面中新增加一个标签,即

可以在此增加样式。实际上现阶段学到的标签都可以加样式,CssStyle和CssClass.

通过查看源代码可以发现,

FieldError是一个map
actionError是Collection(实际上是一个 arraylist)

如何在一个action封装多个业务逻辑呢?

可以在struts.xml的action中增加一个属性,method="XXX"

即会调用action的XXX方法,而不是execute方法。

既然有不同的业务逻辑(方法),那么不可能使用同一验证方法。因此要实现不同的方法的验证,即生成验证方法validateXXX(XXX第一个大写)

如,在action中增加业务逻辑Test,那么就得在struts.xml中做如下修改:
   
        /success.jsp
        /register2.jsp
   

    再把jsp页面的action改为register2即可。

那么再来看看工作流程:

首先struts2拦截用户请求,然后转发到相应的action,调用validateXXX方法,然后调用 validate方法,当无错时执行XXX方法。

这样以来便会调用两次验证方法,但是这样也不符合要求,要如何解决??

有两种方法:
    1.不override 父类的validate,因为父类的validate方法时什么也不做的。
    2.将validate改名,由上面得知,可以将其改成validateExecute。

如此一来,便不会调用2个验证方法了。

第2种方法实际上还是会执行父类的validate,只不过是什么也不做罢了。