如何用Struts标签实现多行提交?
我在网上找了很多资料,
使用数组的用过,可以显示,但是提交的时候
不行,出现Bui之类的,说是数据提交错误使用子类,然后用List
并且扩展类Arrayh后AutoArrayList也出现错误,我的代码如下:
 private List course_arraylist = new AutoArrayList(Course.class);使用的AutoArrayList扩展ArrayList
package course;import java.util.ArrayList;public class AutoArrayList extends ArrayList {    private Class itemClass;    public AutoArrayList(Class itemClass)
    {        this.itemClass = itemClass;
    }    public Object get(int index)
    {
        try {
            while (index >= size())
            {
                add(itemClass.newInstance());
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return super.get(index);
    }
}可以显示数据,从程序里面,使用输入框
但不伦如何都无法得到数据
得到的是我用程序输入的,而不是客户端的数据
<html:form method="post" action="/course/course.do?type=do_message"><br><br>
<logic:iterate id="a" name="list" property="course_arraylist" indexId="index"> 
<html:text name="a" property="course_no" indexed="true" /> 
<html:text name="a" property="course_name" indexed="true"/> <br>
</logic:iterate> 
<html:submit value="submit" />
</html:form>
接受的Action为:
  public ActionForward do_message(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
   {
       CourseForm m_form = (CourseForm) form;
调试这里的m_form是原来的值,并非用户通过输入后改变的值请问是么原因?有没有谁有好的关于使用标签实现多行提交
在jsp里面不写<%%>这样的脚本的程序

解决方案 »

  1.   

    <logic:iterate>标签外面肯定要加个form标签的,提交地址就是你的修改action
    主要问题就是批量修改,一种就是利用表单数组,你struts配置文件里面formbean定义一个java.lang.String[]数组接受
    或者提交之前把所有要修改的记录的各个属性,各自合并成一个字符串,然后到服务端拆解
    最后再通过循环更新
    记得要把你每条记录的主健传过去,更新或者删除的时候要用,可以在每条记录前加个复选框,值就为ID
    jsp:
    <html:form action="/update.do">
    <logic:iterate id="zhunjiachexing" name="data">
    ......
    .....
    <input type="checkbox" name="numbers" value="<bean:write name="zhunjiachexing" property="number"/>" /><html:text name="zhunjiachexing" property="name" size="40" style="text-align:right;" />
    <input type="submit" name="submitbtn" value="修改"/>
    </logic:iterate>
    </html:form>struts-config.xml关于update的formbean属性
    <form-property name="name" type="java.lang.String[]"/>
    update action部分代码 DynaActionForm daf = (DynaActionForm) actionForm;
                
                String[] names = (String[])daf.get("name");String[] numbers= (String[]) daf.get("numbers");for ( int num = 0; num < numbers.length; num++ ) {   //update zhunjiachexing set name=names[num] where number=numbers[num]
    }
      

  2.   

    今天早上又有按照上面说的写一个用数组方法的:
    但是还是不行,得不到客户端输入的值,
    可以显示程序已经所给的数组准确的值
    接受页面没有错误页面出现,接受的还是程序所给的,非更新值
    下面是struts-config.xml配置文件
    <form-bean name="string_Teacher_Form" type="string_teacher.String_Teacher_Form" >
         <form-property name="teacher_no" type="java.lang.String[]" />
         <form-property name="teacher_name" type="java.lang.String[]" />     
    </form-bean>
    ……
    <action name="string_Teacher_Form" parameter="method" path="/string_teacher/string_teacher" type="string_teacher.String_Teacher_Action">
          <forward name="view" path="/string_teacher/string_teacher_view.jsp" />
          <forward name="do_message" path="/string_teacher/do_message.jsp" />
        </action>
    String_Teacher_Form.java
    public class String_Teacher_Form extends ActionForm {
        private String[] teacher_no;
        private String[] teacher_name;
        public ActionErrors validate(ActionMapping actionMapping,
                                     HttpServletRequest httpServletRequest) {
                /** @todo: finish this method, this is just the skeleton.*/
            return null;
        }    public void reset(ActionMapping actionMapping,
                          HttpServletRequest servletRequest) {
        }    public void setTeacher_no(String[] teacher_no) {
            this.teacher_no = teacher_no;
        }    public void setTeacher_name(String[] teacher_name) {
            this.teacher_name = teacher_name;
        }    public String[] getTeacher_no() {
            return teacher_no;
        }    public String[] getTeacher_name() {
            return teacher_name;
        }
    }
    下面是String_Teacher_Action.java
    public class String_Teacher_Action extends DispatchAction 
    {
        public ActionForward view(ActionMapping mapping, ActionForm form,
                                     HttpServletRequest request,
                                     HttpServletResponse response) {
            String_Teacher_Form m_form = (String_Teacher_Form) form;
            int m_row=50;
            String[] teacher_name = new String[m_row];
            String[] teacher_no = new String[m_row];        
            for(int i=0;i<m_row;i++)
            {
                teacher_name[i]="teacher_no:"+(i+1);
                teacher_no[i]="teacher_name:"+(i+1);
            }
            m_form.setTeacher_name(teacher_name);
            m_form.setTeacher_no(teacher_no);
            request.setAttribute("form",m_form);
           return mapping.findForward("view");
        }
        public ActionForward do_message(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response) {
        String_Teacher_Form m_form = (String_Teacher_Form) form;
        request.setAttribute("form",m_form);
       return mapping.findForward("do_message");
    }}下面是string_teacher_view.jsp代码
    <html:form action="/string_teacher/string_teacher.do?method=do_message" method="POST" >
    <table align="center" width="80%" border="1" cellpadding="4" cellspacing="1" bordercolor='red'>
    <tr><td>teacher_name</td><td>teacher_no</td></tr>
    <logic:iterate id="item" name="form" property="teacher_name" indexId="index">
    <tr>
    <td>  <html:text  name="form" property="<%="teacher_name["+index+"]"%>" indexed="true"/></td>
    <td>  <html:text  name="form" property="<%="teacher_no["+index+"]"%>" indexed="true"/></td>
    </tr>
    </logic:iterate>
    </table>
    <INPUT TYPE="submit" value="确定">
    </html:form>下面是do_message.jsp
    <html:form action="/string_teacher/string_teacher.do?method=view" method="POST" >
    <table align="center" width="80%" border="1" cellpadding="4" cellspacing="1" bordercolor="steelblue" >
    <tr bgcolor="steelblue"><td>teacher_name</td><td>teacher_no</td></tr>
    <logic:iterate id="item" name="form" property="teacher_name" indexId="index">
    <tr>
    <td>  <html:text  name="form" property="<%="teacher_name["+index+"]"%>" indexed="true"/></td>
    <td>  <html:text  name="form" property="<%="teacher_no["+index+"]"%>" indexed="true"/></td>
    </tr>
    </logic:iterate></table>
    <INPUT TYPE="submit" value="确     定" >
    </html:form>以前这种情况的接受会出现
    javax.servlet.ServletException: BeanUtils.populate
    这样的错误,但是现在不出现了,但是却得不到客户端的输入更新值
    还是以前的值
    为何?