按说是没有办法的,因为你的form变的时时,actionform类也要变,这好像不太现实。

解决方案 »

  1.   

    我看了一下Map-backed ActionForms
    和list backend actionform,好像也不适合这种情况
      

  2.   

    应该是可以的,请看Struts 1.1 ->4.3.2 节 Map-backed ActionForms.
    下面是从它的文章的摘录,可能会对你有帮助.  public FooForm extends ActionForm{
         private final Map values = new HashMap();
        public void setValue(String key,Object value){
            values.put(key,value);
        }
        public object getValue(String key){
          return values.get(key);
       }
     }在Jsp中,你可以这样访问
     <html:text property= "value(name)" />
      value(name) -> 使用 getValue(name)去访问属性值.当然,你也可以用List来代替Map来实现上面功能,但访问其
    值的话就需要使用listName[index]来访问.
    不知道你有没有明白.
      

  3.   

    Djava(Djava:我又仔细看了一下Map-backed ActionForms.
    那一节,结合我们的实际要求作了一个例子发现确实是可以实现的,呵呵。
    不过我还想问一下,这种Map-backed ActionForms.能不能作成动态配置的actionform呢???
      

  4.   

    就是使用DynaActionForm,把这个Map-backed ActionForms作为这样一个属性配置:
    例如:
    <form-property name="values" type="java.util.Map"/>
    可不可以呢?
      

  5.   

    请看我的这一个例子.
        //-----------  multiUpload.jsp --------------------
    <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-template" prefix="template" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %><html:html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>Multiple file upload example</title>
    </head>
    <html:form action="multiUpload.do" enctype="multipart/form-data" method="post">
      <html:select property="fileCount">
        <html:option value="2">2</html:option>
      </html:select>
      <br>
      <html:file property="imageFile[0]"/> <!--请注意这里 -->
      <html:file property="imageFile[1]"/> <!--请注意这里 -->
      <br>
      <html:submit value="submit" property="submit"/>
      <html:reset value="reset" property="reset"/>
    </html:form><body>
    </body>
    </html:html>  // MultiUploadAction.javapublic ActionForward execute(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
          throws Exception {      MultiUploadForm multiUploadForm = (MultiUploadForm) form;
          int count=multiUploadForm.getFileCount();
          FormFile theFile;      byte[] bytesIn =new byte[4096];
          int len;
          for (int i=0;i<count;i++){
            theFile= multiUploadForm.getImageFile(i);        BufferedInputStream bis = new BufferedInputStream(theFile.getInputStream());
            FileOutputStream fos = new FileOutputStream("d:/"+i+".tmp");
            BufferedOutputStream bos = new BufferedOutputStream(fos);        while((len=bis.read(bytesIn))!=-1){
              bos.write(bytesIn,0,len);
            }
            bis.close();
            fos.close();
            bos.close();
            theFile.destroy();
          }      return mapping.findForward("success");     }   // MultiUploadForm.java
        import org.apache.struts.upload.FormFile;
     
      private Map files = new HashMap(); //不要用List,因为用List在处理set/get很麻烦
      private int fileCount;  public int getFileCount() {  //get value from select named fileCount
        return fileCount;
      }
      public void setFileCount(int fileCount) {
        this.fileCount = fileCount;
      }  public void setImageFile(int key,FormFile value){
        files.put(new Integer(key),value);
      }
      // get value from file named imageFile.
      public FormFile getImageFile(int key){
        return (FormFile)files.get(new Integer(key));
      }  //struts-config.xml<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
      <!-- form bean -->
      <form-beans>
        <form-bean name="uploadForm" type="org.apache.struts.webapp.upload.UploadForm" />
        <form-bean name="multiUploadForm" type="org.apache.struts.webapp.upload.MultiUploadForm">
          <!--注意下面这一行,要设置属性 -->
          <form-property name="imageFile" type="org.apache.struts.upload.FormFile" />    </form-bean>
      </form-beans>
      <!-- action mmapping -->
      <action-mappings>
        <action name="multiUploadForm" type="org.apache.struts.webapp.upload.MultiUploadAction" validate="false" input="/multiUpload.jsp" scope="request" path="/multiUpload">
          <forward name="success" path="/success.jsp" />
        </action>
      </action-mappings>
      <!--controller -->
      <controller maxFileSize="2M" />
    </struts-config>   在IE地址栏输http://localhost:8080/struts-upload/multiUpload.jsp,你就可以测试一下,
       上载的两个文件会放到D:\,分别叫0.tmp和1.tmp. 没有处理验证等.
       你在Javascript中可以加入若干个 file 控件,名字叫imageFile[x](x -> 0... 即可.   
      

  6.   

    我测试了这个例子,报了一些错误。
    1)再multiUpload.jsp里用imageFile[0]这种名称struts总认为acitonform应该有一个叫imageFile的Map,而你定义的imageFile事FormFile类型的,Map类型的确叫files2)multiUploadForm是继承DynaActionForm吗?一部分属性在
    类里,一部分属性通过配置文件配,可事运行起来好像不认识类里定一的属性,只认识配置文件里定一的属性。
      

  7.   

    Djava怎么还没来呀,:(((