Struts2中使用validate框架对Action的不同方法进行验证

来源:互联网 发布:乐敦cc使用方法知乎 编辑:程序博客网 时间:2024/05/29 08:36
 

Struts2中对输入校验最常用无非就是重写ActionSupport类的validate方法(编写java代码)和使用validate框架(xml文件)。

先看一下编写java代码进行验证的方法:编写Action时从ActionSupport继承,重写validate方法,则可以对整个Action进行输入校验。注意:因为我们一般都在Action中编写很多个跟业务逻辑相关的方法,而不仅仅是execute方法(类似于Struts1中的DispatchAction),而不同的方法所对应的jsp中的表单可能不一样,那么对不同方法的验证显然是不一样的,这时有一个解决方法就是针对不同的方法编写不同的validate方法,比如对test()方法的验证,编写public void validateTest()方法,依次类推,这时客户端通过叹号(比如”test!aa.action”“test!bb.action”)调用Action的某个方法时,会先执行该方法的验证方法。这里还要说一下,重写的validate()方法对整个Action起作用,所以可删掉validate()方法,如果使用了execute()方法,将其改名为validateExecute()也可!

现在看一下Struts2利用xml实现的validate框架,这是最常用的Struts2输入校验,简便且功能强大!具体的使用就不说了,重点在于对Action不同的方法的校验。

对整个Action可以在与该Action类同路径下编写一个xml文件,比如TestAction,可编写TestAction-validation.xml文件,对整个Action进行校验,那么比如该Action中有aa()、bb()cc() …方法,那么如何对单独的各个方法进行输入校验呢?

Struts2提供的方法是结合struts.xml文件中对TestAction的配置来实现,如在struts.xml中这样配置TestAction

 

<action name="test_aa"

method="aa"

class="com.bluesun.struts2.action.TestAction">

</action>

 

<action name="test_bb"

method="bb"

class="com.bluesun.struts2.action.TestAction">

</action>

 

<action name="test_cc"

method="cc"

class="com.bluesun.struts2.action.TestAction">

</action>

 

这样在TestAction类路径下编写TestAction-test_aa-validation.xmlTestAction-test_bb-validation.xmlTestAction-test_cc-validation.xml,分别对不同的业务逻辑相关方法进行输入校验(同样注意TestAction-validation.xml文件对整个Action的验证作用哈)。

 

大家发现如果采用上面的配置,即对一个Action类配置了多个name,极不方便。大家如果在Struts1中使用过模式匹配,就会发现,Struts2中同样可以使用模式匹配来解决这个问题,下面是使用了模式匹配后的配置:

 

 

<action name="test_*"

method="{1}"

class="com.bluesun.struts2.action.TestAction">

</action>

 

另外,这样的配置也支持 test.action test_.action 的访问,调用的是execute()方法。(大家可以参考Struts2的开发包中的apps实例)

原创粉丝点击