.....
<form-bean name="multiboxForm" type="examples.multibox.MultiboxActionForm"/>
....
<action path="/prepareMultibox"
type="examples.multibox.PrepareMultiboxAction"
name="multiboxForm"
scope="request"
validate="false">
<forward name="success" path="/jsp/multibox/Multibox.jsp"/>
</action>
....
<form-bean name="multiboxForm" type="examples.multibox.MultiboxActionForm"/>
....
<action path="/prepareMultibox"
type="examples.multibox.PrepareMultiboxAction"
name="multiboxForm"
scope="request"
validate="false">
<forward name="success" path="/jsp/multibox/Multibox.jsp"/>
</action>
....
<form-bean name="multiboxForm" type="examples.multibox.MultiboxActionForm"/>
....
<action path="/prepareMultibox"
type="examples.multibox.PrepareMultiboxAction"
name="multiboxForm"
scope="request"
validate="false">
<forward name="success" path="/jsp/multibox/Multibox.jsp"/>
</action>
....
=======================================================
这里定义了multiboxForm,但我们并不知道multiboxForm究竟是存储哪个表单的参数啊!系统怎么知道multiboxForm应该处理哪个对应的表单?
<action />标签中应该有input属性的,而input中指定的提交form的jsp,就可以知道multiboxForm对应处理的表单了。
根据你提交的Action, 找到对应的form
参见《struts formBean动态绑定数据的不足及改进》
http://blog.csdn.net/nlhlx/archive/2006/06/11/788541.aspx
而是当验证的时候,也就是主action调用bean中的validate时候,
如果有errors就来到这个页面
比如我在页面index.jsp中有一个表单form1,当我点了提交之后就会存储到一个ActionForm的对象中(假如为ActionForm1)。我想问的是,系统怎么知道要把form1存储到ActionForm1中呢?而不是存储到ActionForm2,ActionForm3.....?
-----------------------------------------好像没有啊
....
<action path="/prepareMultibox"
type="examples.multibox.PrepareMultiboxAction"
name="ActionForm1" <<<<<<<<
scope="request"
validate="false">
<forward name="success" path="/jsp/multibox/Multibox.jsp"/>
</action>这个NAME="ActionForm1"不就是告诉系统,form1要存到ActionForm1了吗?在JSP中:
你的FORM1有一个action属性,action是="prepareMultibox.do"
也就是说form1提交的时候是发一个prepareMultibox.do的请求在struts的配置文件中:
action的path就=/prepareMultibox,就是所有prepareMultibox.do的请求都由他来管
刚才JSP的form就是提交这个请求,这个请求就是由这个action来管
那你提交form1的时候不就转到这个<action >标签来了吗?而这个<action >又规定了要把form1存到name属性所指向的actionForm中
这里name="ActionForm1",那form1不就是存到actionForm1了吗?-----------------------------------------
所以我上面告诉你的,struts有一个最大的毛病就是命名有歧意
input是不是指定用来提交这个form的JSP
提交form到jsp自然是由form所在页面来完成
你到form不可能独立于一个页面凭空存在吧这个input是当ActionForm的validate也就是验证不通过的时候的转向页面
你完完全全可以设置为:input="输入出错啦.jsp"
所以,这个名字歧意,input应该是"invalidate"稍好理解些而这个name,也是歧意,name会让人认为是这个action的name
而实际上他是存储form的name,所以,是"formName"稍好理解些
(actionForm只是一个bean,一个date的传送者,也就是一个苦力,搬运工)
<action>是配置文件中的标签<aciton>
其他的action都是类
1.表单提交,产生请求:abc.do
2.ActionServlet截获.do请求,并根据请求名abc找到path属性为abc的<action>配置
3.根据找到的<action>,找到name属性对应的actionForm
ActionServlet把表单装到对应actionForm中
4.如果<action>的validate属性为true,调用actionForm的validate(),validate会根据输入判断是否产生error,如果产生error,转6,如果没有,继续5.找到<action>的type属性所指定的action,调用这个action的excucet()方法实现业务逻辑,ex()方法返回forward对象,AcitonServlet根据这个forward找<action>中对应的<forward>中对应的页面,转向这个页面(如果<aciton>中找不到,就找全局<forward>)...流程结束(当然还有些struts的内置处理,这里不论)6.如果有error产生,ActionServlet找<aciton>中的input属性对应的页面,转向这个页面