`
Goodtiger
  • 浏览: 107428 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

form到bean,反向注入还是主动提取

阅读更多

一、反向注入
很多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提取本身也不是一件非常复杂的事情。

4
1
分享到:
评论
1 楼 mollie 2010-01-11  
如果采用此种方式,js验证怎么做呢?

相关推荐

    使layui.js form 可主动验证表单是否通过

    使layui.js form 可主动验证表单是否通过。扩展layui下的form.js 。文章链接 https://blog.csdn.net/qq_17837497/article/details/107505486

    Struts常见的Form(一)

    在Struts中,Form Bean是用于处理用户输入的重要组件,它充当了模型层与视图层之间的桥梁。本篇文章将深入探讨Struts中的常见Form类型及其应用。 首先,我们要理解Form Bean的作用。Form Bean是用来存储用户从页面...

    struts form 表单 用法

    在`execute`方法中,我们可以通过`ActionForm`参数获取到Form Bean实例,并访问其中的属性。处理完用户输入后,使用`ActionMapping`的`findForward`方法返回结果视图。 **5. 结合HTML `<form>`标签** 虽然Struts...

    java bean 与 Web Form表单如何实现自动装配

    【JavaBean与Web Form表单自动装配】是Web开发中常用的一种技术,特别是在使用像Struts2这样的MVC框架时,能够极大地简化数据绑定的过程。这个过程的核心是将用户在Web表单中填写的数据自动地映射到JavaBean对象的...

    C# form1 ,form2 互相传值

    本主题将深入探讨如何在两个独立的窗体之间有效地传递数据,以实现Form1的TextBox控件值传递到Form2,以及Form2的TextBox控件值回传给Form1。 首先,让我们了解Form1向Form2传递值的基本步骤: 1. **创建Form2对象...

    angularjs2 form和依赖注入

    在AngularJS 2(现在被称为Angular)中,表单处理和依赖注入是两个核心概念,它们对于构建功能丰富的单页应用程序至关重要。让我们深入探讨这两个主题。 **AngularJS 2 表单** AngularJS 2 提供了两种类型的表单:...

    form-generator项目集成方案.doc

    在引入form-generator项目时,需要复制form-generator项目的components文件夹下的全部文件、uits文件夹下的所有文件以及views文件夹下全部文件到自己项目中,styles文件夹下全部文件复制到自己工程,icons文件夹下...

    Form1调用Form2 ,From2回传值或调用Form1内的方法。

    这在开发GUI应用程序时尤为常见,例如一个窗体(Form1)打开另一个窗体(Form2),然后Form2执行某些操作并返回结果给Form1,或者调用Form1中的方法。这个过程可以通过多种方式实现,其中一种常见且灵活的方法是使用...

    动态form编写

    通过`<form-bean>`元素定义表单Bean,其中`name`属性用于标识表单,`type`属性则指定表单Bean的具体类型。例如: ```xml <form-bean name="searchForm" type="org.apache.struts.action.DynaActionForm"> <form-...

    一个Form数据拆分到不同的jsp中

    标题中的“一个Form数据拆分到不同的jsp中”是指在Web开发中,如何将一个大型的表单(Form)逻辑拆分成多个独立的JavaServer Pages(JSP)文件,以便更好地管理和维护页面结构。这种做法有助于提高代码的可读性和可...

    webbean.pdf

    - **绑定注解**:通过使用绑定注解(如`@MyQualifier`),我们可以指定特定的Bean实例应该被注入到何处。 - **部署类型**:WebBeans支持多种部署类型,包括容器托管的Bean和程序控制的Bean等。 - **解决未满足的依赖...

    Form2调用Form1控件的解决方案

    这意味着对`Form2`中传递进来的`Button`对象所做的任何修改都会反映到原始对象(即`Form1`中的`Button1`)上。 - **事件处理**:在`Form1`中,当`Button1`被点击时,创建一个`Form2`实例,并将`Button1`作为`ref`...

    ORACLE ebs FORM开发中form个性化处理

    首先,EBS Form个性化涉及到的主要内容包括界面布局调整、字段显示控制、按钮功能定制、默认值设定等。通过自定义这些元素,可以确保每个用户看到的Form界面符合其工作需求,减少不必要的操作步骤,提升生产力。 在...

    解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?

    在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...

    Form(汉化+注册)

    标题中的"Form(汉化+注册)"指的是After Effects(AE)的一款名为Form的插件,该插件已经过汉化处理并且完成了注册流程,这意味着用户可以...无论是新手还是经验丰富的设计师,都能通过Form提升自己的作品质量和效率。

    SAP SCRIPTFORM 学习例子

    总的来说,这个学习例子将带你逐步了解SAP Scriptform的各个方面,从创建基本的表单到处理复杂的页面布局,再到将结果导出为PDF,是一套全面的学习资源。通过深入学习并实践这些材料,你将能够熟练地利用SAP Script...

    js 提交form表单和设置form表单请求路径的实现方法

    form表单ID:postform 设置表单请求url document.postform.action = SaveReturnInfo; 提交form表单 document.getElementById(postform).submit(); 以上就是小编为大家带来的js 提交form表单和设置form表单请求路径...

    网页js脚本注入,可执行任意代码。

    网页JS脚本注入,突破网页本地脚本验证方法实例 JS脚本注入是一种常见的网页攻击手法,通过注入恶意脚本来控制网页的行为。在这个实例中,我们将展示如何使用JS脚本注入来突破网页本地脚本验证方法,跳过验证码,并...

    C# 不同Form之间值的传递

    在C#编程中,Form是Windows应用程序中用户界面的基本组件,常常需要在多个Form之间传递数据。本篇文章将深入探讨三种常见的在不同Form之间传递值的方法:公共变量、窗口调用以及构造函数。 1. 公共变量 公共变量是...

Global site tag (gtag.js) - Google Analytics