传智播客 struts1.x表单验证与DispatchAction详解

    今天主要讲了消息文件、表单验证和struts的各种DispatchAction。消息文件用于存放本地化消息文本。消息文件只是一个文本文件,它包含的是”关键字/值”对。在struts-config.xml中可以通过<message-resources>元素定义消息文本:<message-resources parameter="com.hello.ApplicationResources" />,这是IDE默认生成的。<message-resources>标签的主要属性是 parameter 属性,它给出了应用程序的消息文件相对于web应用程序的/web-inf/classes/目录的位置,因此前面的声明中,消息文件的位置/web-inf/classes/com/hello/Application.properties,在该声明中,.properties扩展名是隐含的。
    关于表单验证,需要补充的知识点有很多。当用户提交了 HTML 表单后,Struts框架将自动把表单数据组装到ActionForm Bean中。如果Struts-config.xml中的<action>的validate属性值设为true(默认值为true),接下来Struts框架会自动调用ActionForm Bean的validate()方法进行表单验证。如果validate()方法返回的ActionErrors对象为null,或者不包含任何ActionMessage对象,就表示没有错误,表单验证通过。如果ActionErrors中包含ActionMessage对象,就表示发生了验证错误,Struts框架会把ActionErrors对象保存到request范围内,然后把请求转发到刚才的Struts-config.xml中的<action>的input中,视图组件通过<html:errors/>标签把request范围内的 ActionErrors 对象中包含的错误消息显示出来,提示用户修改错误。
    DispatcherAction类能够在同一个 Action 类中完成一组相关的业务操作,以达到减少重复编程,使程序更加便于维护。
创建一个扩展 DispatchAction 类的子类,不必覆盖 excute() 方法,而是创建一些实现业务逻辑的方法,这些业务逻辑方法都应该和 excute() 方法具有相同的方法签名,即它们的参数和返回类型都应该相同,此外也应该声明抛出Exception 异常.
在配置 DispatchAction 类时,需要把 parameter 属性的值设置为”method”.把 parameter 的属性配置为”method”后,当用户请求访问 DispatchAction 时,应该提供 method 请求参数.例如:http://localhost:8080/test/test?method=add
<action>的parameter属性:指定 Action 的配置参数。在Action类的 excute() 方法中,可以调用 ActionMapping 对象的 getParameter() 方法来读取配置参数。
    LookupDispatchAction类是DispatcherAction 的子类,在该类中可以定义多个业务方法,适用于一个表单中有多个提交按钮,且这些按钮又都有一个共同名字的场合。它与DispatchAction类的作用差不多,唯一不同的是:这个类是通过资源包中的key作为请求参数来进行对方法的映射,而DispatchAction是通过请求参数来选择方法。LookupDispatchAction的用法:用MessageResource将按钮的文本和ResKey相关联;在Action配置中一个parametr属性,属性值与submit按钮的property属性值相同,这个属性可以指定执行LookupDispatchAction中对应的方法;继承LookupDispatchAction,重写getKeyMethodMap()方法, 将ResKey和MethodName对应起来。DispatchAction 类使用请求参数的值确定调用哪种方法,而LookupDispatchAction类利用请求参数值,反向查询资源绑定,并将它与类中的一种方法匹配,这两种方法有异曲同工之妙。
    最后一个是MappingDispatchAction,该类是 DispatchAction的子类,用于将相关的请求组织到一个Action之中。它的用法如下:首先将一个 MappingDispatchAction 类根据不同的请求进行多次声明,其中path属性因请求的不同而不同,并为每个 action 添加 parameter 属性来指定相同 Action 类处理不同请求的方法名。然后创建一个扩展 MappingDispatchAction 类的子类,不必覆盖 excute() 方法,而是创建一些实现业务逻辑的方法,这些业务逻辑方法都应该和 excute() 方法具有相同的方法签名,即它们的参数和返回类型都应该相同,此外也应该声明抛出Exception 异常。它与DispatcherAction的区别:MappingDispatcherAction适合当想要为相同的Action定义多个表单操作处理器的时候,而DispatcherAction适合基于某种理由不想要定义多个表单操作处理器的时候。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值