对于struts里的各种ActionForm的一些比较

本文深入探讨了Struts框架中的ActionForm与ValidatorForm等概念,分析了静态ActionForm与动态DynaActionForm的区别,并介绍了Map-backedActionForm的应用场景。
以前没注意struts里的ActionForm是怎样,每次拿个 DynaValidateForm就上去了
现在开始回归基础,务实的想写写个非应付式的项目,锻炼下自己,把问题都看透一些


1,
关于静态ActionForm和动态DynaActionForm,
网上有很多比较,两者区别很明显的是一个需要自己写出class出来,后者可以在xml配置,struts根据xml生成,相应的ActionForm

动态ActionForm可以省下很多ActionForm类,而且由于是写在XML,不想静态类,稍做修改就需要重启服务器,但是会有一个小问题,以后都是用DynaForm.get(String)这样取类了,没有ActionForm的getter了,这样写代码的时候,因为编译器还没智能到可以帮你检查出String是不是你想要的那个,所以会容易出错一些

2,ActionForm和ValidatorForm的区别[动态的一样区别]

ValidatorForm是ActionForm的一个子类,ValidatorForm重写了validate()方法(当然也增加了方法),可以支持validator框架的xml验证了,会很方便的省下很多java验证代码

3,ValidatorForm和ValidatorActionForm
这两者去区别很微小,
后者是前者子类,
看源代码可以发现后者只是将前者的
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getAttribute();
}

重写成了
public String getValidationKey(ActionMapping mapping,
HttpServletRequest request) {
return mapping.getPath();//仅此行不同
}

表现出来的也就是在使用validate框架的时候就是在
<form name="XXXForm">
前者是看的form

<form name="/XXXPath">
后者看到的是Action的path

4,最后要提一下Map-backed ActionForm
它是在ActionForm需要动态扩充的时候使用的
下文转自本人收藏的一部struts学习笔记中,作者不详,不好意思了
/********************我是长长的分割线**********************************/
有的時候您的表單內容可能是由程式動態產生的,這時候表單上的欄位與參數事先並無法得知,因而無法事先決定好 ActionForm 的屬性,在Struts 1.1中,您可以使用Map-backed ActionForm,這樣的ActionForm使用Map來儲存表單的欄位值,一個例子如下:

UserForm.java
package onlyfun.caterpillar;import java.util.*; import javax.servlet.http.*; import org.apache.struts.action.*;public class UserForm extends ActionForm { protected Map map = new HashMap(); public void setValue(String key, Object value) { map.put(key, value); } public Object getValue(String key) { return map.get(key); } public Map getMap() { return map; } public void reset(ActionMapping mapping, HttpServletRequest req) { map.clear(); } }

在Action類別中,您可以如下面的方式來取值:

LoginAction.java
package onlyfun.caterpillar; import javax.servlet.http.*; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { UserForm userForm = (UserForm) form; String name = (String) userForm.getValue("name"); String password = (String) userForm.getValue("password"); ..... } }


/********************我是长长的分割线**********************************/以上均本人新手探索,欢迎智者指正批评


最后,本人对自己的今天的小学习做个小总结:
1,看源代码很爽,有种偷窥的快感,哈哈,下次多看看
2,终于了解动态构造类是怎么干的了,一直想不通怎么给java类动态加属性,原来可以像Map-backed ActionForm一样,用map实现,小小猜测,欢迎指正
根据原作 https://pan.quark.cn/s/0ed355622f0f 的源码改编 野火IM解决方案 野火IM是专业级即时通讯实时音视频整体解决方案,由北京野火无限网络科技有限公司维护支持。 主要特性有:私有部署安全可靠,性能强大,功能齐全,全平台支持,开源率高,部署运维简单,二次开发友好,方便与第三方系统对接或者嵌入现有系统中。 详细情况请参考在线文档。 主要包括一下项目: 野火IM Vue Electron Demo,演示如何将野火IM的能力集成到Vue Electron项目。 前置说明 本项目所使用的是需要付费的,价格请参考费用详情 支持试用,具体请看试用说明 本项目默认只能连接到官方服务,购买或申请试用之后,替换,即可连到自行部署的服务 分支说明 :基于开发,是未来的开发重心 :基于开发,进入维护模式,不再开发新功能,鉴于已经终止支持且不再维护,建议客户升级到版本 环境依赖 mac系统 最新版本的Xcode nodejs v18.19.0 npm v10.2.3 python 2.7.x git npm install -g node-gyp@8.3.0 windows系统 nodejs v18.19.0 python 2.7.x git npm 6.14.15 npm install --global --vs2019 --production windows-build-tools 本步安装windows开发环境的安装内容较多,如果网络情况不好可能需要等较长时间,选择早上网络较好时安装是个好的选择 或参考手动安装 windows-build-tools进行安装 npm install -g node-gyp@8.3.0 linux系统 nodej...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值