一、反向注入
很多Web框架中将form中的fields自动转换成bean或相应类型,然后设置到action的setter方法中。这样就可以很方便的在action中获取fields,webwork是直接注入到action中,Struts则有一个formbean做中转,和实际的bean还不一样,有点类似DTO的概念,其实觉得Struts的formbean有点鸡肋的感觉。我想很多人对这种反向注入觉得很方便吧,但是这个自动注入的操作还会涉及到其他一些东西。
1、注入的话,那就需要有一个被注入的对象。这句话看起来很像是废话,但是在某些框架或是场景中,想要找到这个对象就比较麻烦。像WebWork是以action为中心的,注入到action中是很自然的事情,所有的interceptor都是围绕着action的。但是如果框架中不存在中心的概念,那么应该把form注入到哪一个对象中去呢。注入进去不复杂,但是框架注入进去了,又没有使用,不是白费力气了。解决这个办法的话,要么就有配置文件,要么使用Annotation。
2、一旦注入,action就是有状态了,action就不能公用了,每个action都必须被一个Request独享。这个就看应用的需求了,如果对创建和销毁对象的数目有要求的话,这也就需要考虑了。
3、form注入的话,对于动态数目的from注入就很麻烦了。一般注入的话,会有确定的数目进行注入,但是不确定数目,就很难注入了。
4、验证form的逻辑也进入到了action中了,至于是不是要把form的验证和action耦合在一起,那也是需要去权衡的。我还是倾向于在action中不需要出现对form的验证。
二、主动提取
主动提取的话,就是在action的外围提供formService,来对form的fields进行类型、校验等处理。
action在需要fields数据的时候,主动去获取,虽然在fields数目比较多的时候,会觉得不如反向注入来得方便,但是action只需要获取它所需要的数据,而在获取之前已经对数据做好了验证和类型的处理。这么做的好处,就是不像Struts那样,对于form,需要有一个formbean来支持,虽然Struts也可以通过配置文件来获取动态的formbean,但是事实上我们也不一定都要把formbean转化成bean。
很难直接下定论说反向注入好还是主动提取好,在背后其实都是一种思想,在某个特定框架中,或者在某个具体的应用中,哪种方案更加契合才是选择的依据。毕竟form的fields提取本身也不是一件非常复杂的事情。
分享到:
相关推荐
使layui.js form 可主动验证表单是否通过。扩展layui下的form.js 。文章链接 https://blog.csdn.net/qq_17837497/article/details/107505486
angularjs2 form和依赖注入
form1form1form1form1form1form1form1
C# form1 ,form2 互相传值,form1 textbox 值传到form2 textbox, form2 textbox 值 传给 form1 textbox
Form2 f2 = new Form2(ref button1); f2.Show(); } Form2里这样写: public Button button; public Form2(ref Button button) { this.button = button; InitializeComponent(); } private void ...
form表单ID:postform 设置表单请求url document.postform.action = SaveReturnInfo; 提交form表单 document.getElementById(postform).submit(); 以上就是小编为大家带来的js 提交form表单和设置form表单请求路径...
form-generator集成到本地项目
表单数据与bean的属性映射的原理,对Struts2模型驱动的理解有帮助。
Form验证表单Form验证表单Form验证表单Form验证表单
在MS.NET架构里,Form是一个经常使用到的词汇。比如:编写Windows 应用时会提到Windows Form,编写Web 应用时会提到Web Form。Windows Form可以看作一个Windows窗体,这和在VB里面一样。而Web Form则代表了一个一个...
form2form2form2form2form2form2
解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?
学习SAP scriptform 初始入门培训资料~~ form换页等信息都包括在内 将FORM输出保存为本地文件
通过委托实现,初学C#的可参考,借以理解event、EventHandler等; 高级人士勿笑
form数据与json对象的互相转换(完整版) * 将web Form 的数据转化成json字符串 * 将json对象的值解析后填入web Form 在AJAX开发中这是关键技术: 1、将form中的数据利用本工具转换成json格式的字符串,再通过ajax传...
form开发中,应客户需求,form的个性化设置是不得不考虑的一个重点 ;(顺便上传METALINK上较好的几页)
漂亮的form表单-漂亮的form表单-漂亮的form表单
Oracle EBS Form开发小技巧汇总 2 Form中Block的重新查询 9 客户化Form中实现行号功能 12 使用Custom.pll修改标准Form的LOV 16 ...[FORM] 一步步教你如何在form中使用pl/sql将数据文件上传到客户表中 56
flask form表单