.....
<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>
....

解决方案 »

  1.   

    .....
    <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应该处理哪个对应的表单?
      

  2.   

    athenadd好象少写了点东西吧……
    <action />标签中应该有input属性的,而input中指定的提交form的jsp,就可以知道multiboxForm对应处理的表单了。
      

  3.   

    根据Action, struts-config.xml中还配置了<action name="multiboxForm"  path="...>
    根据你提交的Action, 找到对应的form
      

  4.   

    使用struts,超越struts。
    参见《struts formBean动态绑定数据的不足及改进》
    http://blog.csdn.net/nlhlx/archive/2006/06/11/788541.aspx
      

  5.   

    struts的一大缺点是他的很多名字定义得很....奇怪<action> 中name属性是指定存表单的bean,它对应的是<form-bean>注册的beaninput属性指定的页面不是说用来input这个bean的页面
    而是当验证的时候,也就是主action调用bean中的validate时候,
    如果有errors就来到这个页面
      

  6.   

    怎么你们老是误解我的意思呢?我的问题是:
    比如我在页面index.jsp中有一个表单form1,当我点了提交之后就会存储到一个ActionForm的对象中(假如为ActionForm1)。我想问的是,系统怎么知道要把form1存储到ActionForm1中呢?而不是存储到ActionForm2,ActionForm3.....?
      

  7.   

    STRUTS-CONFIG的配置就是告诉存储到ActionForm1而不是ActionForm2,ActionForm3.....?
      

  8.   

    STRUTS-CONFIG的配置就是告诉存储到ActionForm1而不是ActionForm2,ActionForm3.....?
    -----------------------------------------好像没有啊
      

  9.   

    人家不是告诉你了吗?改一下上面的,按你说的:<form-bean name="ActionForm1" type="examples.multibox.ActionForm"/>
    ....
    <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"稍好理解些
      

  10.   

    另外你还有个逻辑错误:这里定义了multiboxForm,但我们并不知道multiboxForm究竟是存储哪个表单的参数啊!系统怎么知道multiboxForm应该处理哪个对应的表单?不是由actionForm去装表单,而是由表单去填actionForm
    (actionForm只是一个bean,一个date的传送者,也就是一个苦力,搬运工)
      

  11.   

    表单提交流程:
    <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属性对应的页面,转向这个页面