struts中的formbean主要是用来封装(通过反射)浏览器或使用http协议的客户端提交的表单数据,我想大家在这一点上已达成共识,没什么好说的,在这层意义上,<html:text>之类表单struts tag,似乎没有什么用武之地,实际上也确实如此,使用普通的html tag可达到同样效果.但有一点很重要的是:struts tag可以自动从后台获取数据来填充页面.
下面举个例子来探讨这种机制:
现有两个action类,AAction,BAction
两个Form类,AForm,BForm
一个页面:A.jsp
这五个元素关系如下:
AAction 使用AForm,BAction使用BForm,AAction对应A.jsp,AForm和BForm都含有x和y属性,A.jsp的部分关键代码如下:
<html:form action="/BAction">
<html:text property="x" />
<html:text property="y"/>
</html:form>
当点击AAction(假设在其中使用request.setAttribute("VO",AForm),并且AForm.x=10,AForm.y=20时),出现A.jsp,但输入框x,和y空白,但如果AForm就是BForm的话,两个输入框会出现10和20,其实此时并不需要写request.setAttribute("VO",AForm),Struts有个很重要的特点是:当启动一个action时,struts实例化相应的form(如果有的话),并在forward的时候,会自动写上request.setAttrbute(formname,form),formname即你在配置文件中定义的form名,在本例中点击AAction,当AAction forward的时候,会自动写上request("AForm",AForm),所以当你想偷懒直接将form 传到页面上填充数据时,就不需要显式的这样写了.
当然如果AForm并不是BForm,你也可以这样写达到这种效果
<html:text name="VO" property="x"/>
<html:text name="VO" property="y"/>
由以上可以推断:
<html:form action="/BAction">
<html:text property="x" />
<html:text property="y"/>
</html:form>
实际上就是
<html:form action="/BAction">
<html:text name="BForm" property="x" />
<html:text name="BForm" property="y"/>
</html:form>
值得注意的是BForm可以为空,如果你将name="BForm" 改为name="VO"当然也可以是别的名,VO不能为空
由此当AForm并不是BForm的时候,我们有一种更简便的方案,即写上request.setAttribute("BForm" ,AForm),
这样就不用改页面了,但必须注意AForm必须有相应的属性
后记:
j2ee的常规做法并不推荐返回form作为jsp的数据,而应该返回一个value object或data transfer object
分享到:
相关推荐
NULL 博文链接:https://zywang.iteye.com/blog/413003
Struts1.2动态FormBean 加 验证功能 的一个例子
Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。 虽然,在理论上Struts2的...
2.Struts2和Struts1.x的... Struts1.x 必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。 Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。
4.action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表示的,actionforward对象通过struts-config.xml配置文件中的配置关联到某个jsp页面,因为程序中使用的是在struts-config.xml...
利用java反射校验struts中的formbean 在struts框架中,如果每次都去校验form中的每个字段,显然费时费力,本例通过java反射得到form中的字段和值,并较验,用于在与数据库交互之前的校验,从而防止数据库恶意注入. 随包...
传智播客的struts高级实战进阶 ...封装Formbean数据时的问题 防止表单重复提交 使用复选框的技巧 使用下拉列表框的技巧 文件上传 DispatchAction的应用 Validator框架 Struts请求处理过程的源码分析与digester
流程:在Struts中,用户的请求一般以*.do作为请求服务名,所有的*.do请求均被指向ActionSevlet,ActionSevlet根据Struts-config.xml中的配置信息,将用户请求封装成一个指定名称的FormBean,并将此FormBean传...
NULL 博文链接:https://haixiami200411.iteye.com/blog/736554
在弹出的菜单中,根据图例提示,选择Myeclipse后在弹出的二级菜单中选择Add Struts Capabilities…后提示如下图所示: 在弹出的对话框中,设置如下: Struts config path:默认,一般不需要改变。 Struts ...
在struts2中已经不需要struts1中的formbean了。在struts1中每次提交表单的时候,表单中的属性值都先赋予formbean,然后操作formbean。但是现在struts2中用对象.属性名来给对象赋值,然后操作这个对象。而这些对象都...
----Struts 使用技巧---- 1 Struts validate 1.1 使用ActionForm的validate()验证 ...> 配置FormBean: 配置FormBean中的validate()方法,处理相关验证; > 配置Jsp:配置JSP中相关信息接受后台验证信息的处理结果;
在Struts中几种情况可以使标签初始就是选中的,Formbean里面该Property的值设为 1.on 、2.yes 、3.true 这三种情况都是可以实现默认选中的。 注:如果不选中,最好把Property的设置为””,因为在Action中得到...
介绍如何使用动态formbean的例子
7. struts框架中,关于FormBean,下列哪些说法是正确的: A FormBean是一种数据bean,主要用来封装表单提交上来的数据,并把这些数据传递给Action B 在FormBean中可以对页面上传递来的参数进行一下格式上的验证...
Struts1.0和1.1差别很大,主要有两点:Struts1.1中引用了很多apache其他项目的类包,如:xml解析、日志、验证等,因此struts1.1的包结构与1.0完全不同。在struts1.1环境下,一个webapp要成功运行,除了struts.jar外...
使用struts2的验证模式,并在里面使用了formbean的模式。
newxy是hibernate的替代者,是web快速开发...2.《web开发:通用持久类代替hibernate的持久类、通用动态formBean类代替struts的formBean类》http://dev.csdn.net/author/nlhlx/d4343e375a9d42e2b3402eaa549d225f.html