我有一个表,里面有100个字段,需要在一个页里编辑保存,但保存的时候有时会保存不了有时候可以,是不是因为一个页面的字段太多了,还是其他什么原因?大家有什么好的方法对这样的情况进行合理的安排啊?
注:希望还是在一个页面里编辑保存数据。

解决方案 »

  1.   

    和字段多少没有关系,估计是你写的程序有一些问题,保存100个字段最好不要一个一个的写,你可以用某些规则自动读取的!不要用request.getParameter一百次,你可以用反射或者什么的做一个循环的getParameter就可以了,例如你可以把数据entity的pojo字段定义和你数据库字段还有jsp页面的都一样,这样就可以利用反射动态读取了以后你加了数据库字段也不用修改程序!
      

  2.   

    TO :王明哲。
    你可以用反射或者什么的做一个循环的getParameter就可以了,例如你可以把数据entity的pojo字段定义和你数据库字段还有jsp页面的都一样,这样就可以利用反射动态读取了以后你加了数据字段也不用修改程序!
    能不能举个例子啊,让大家学习一下,谢谢。
      

  3.   

    要看报什么错,大部分是sql语法错误,比如非空字段,或外键,数字型等等.
      

  4.   

    干吗不用bean去处理,使用hibernate可以自动生成bean,字段越多越在行
      

  5.   

    如果数据量不大建议用ARRAYLIST,如果数据量大建议用数据库
      

  6.   

    这种情况应该是sql语法错误,比如非空字段,或外键,数字型等等.
    或者字段类型的问题你再检查一下但是回来来说你这个处理实在是太巨大了
      

  7.   

    这种情况应该是sql语法错误,比如非空字段,或外键,数字型等等.
    或者字段类型的问题
      

  8.   

    wmzsl(王明哲) 同学的意思是先把字段的名字 存入一个字符串数组  
    读的时候不要一个个request 了
    直接for(i=0;i<n;i++)//读取每次字段名 为arr[i];大概是这么个意思  不知道对不对
      

  9.   

    我给你看个循环的例子吧
    //Created by MyEclipse Struts
    // XSL source (default): platform:/plugin/com.genuitec.eclipse.cross.easystruts.eclipse_4.1.1/xslt/JavaClass.xslpackage com.tiger.monitor.tableinfo.action;import java.lang.reflect.Method;import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    import org.hibernate.Session;
    import org.hibernate.Transaction;import com.common.form.FmFbpzfb;
    import com.common.tools.BaseDBControl;
    import com.common.tools.HibernateUtil;
    import com.tiger.monitor.tableinfo.dao.TableInfoDao;
    import com.tiger.monitor.tableinfo.form.TableInfoForm;/** 
     * MyEclipse Struts
     * Creation date: 10-18-2006
     * 
     * XDoclet definition:
     * @struts.action path="/tableInfoAction" name="tableInfoForm" scope="request" validate="true"
     */
    public class TableInfoAction extends Action { // --------------------------------------------------------- Instance Variables // --------------------------------------------------------- Methods /** 
     * Method execute
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return ActionForward
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) 
    {
    TableInfoForm tableInfoForm = (TableInfoForm) form;
    // TODO Auto-generated method stub

    String flow_id = request.getParameter("flowid");   // 工作流号
    String file_code = request.getParameter("filecode"); //文件号
    TableInfoDao dao = new TableInfoDao(flow_id,file_code,tableInfoForm);
    // 保存主表
    dao.saveZb();  
    //  保存附表
    /*
     * 附表名字命名(f1_1_1)以f开头f1表示主表中的第一个附表,f2表示主表中第二个附表,
     * 中间的数字表示第几条记录,结尾的数字,表示 text在表中的序号
       控件取名意义end:跳出这一行,break:跳出这个表,over离开附表循环
       //存放到数据库按结尾的数字,如:f1_1_2,数据库里面对应的s2
     * */
    Long zbKey = dao.getZbKey();
    String text_name ="";    ////存放莫一个控件的名字
    String text_name_value = "";     ////存放莫一个控件的value
    String break_b = "no"; ///跳出表
    String break_all = "no";    ////结束循环
    BaseDBControl tool = new BaseDBControl();
    FmFbpzfb fb = null;                 //循环中的临时对象
    Method method =null;                //循环中的临时对象
    Class clas = FmFbpzfb.class;
    if(request.getParameter("f")==null || (!request.getParameter("f").equals("no")) )
    for(int b =1;;b++)                   ////遍历所有附表
    {
    for(int h = 1;;h++)               ////遍历所有行
    {
    fb = (FmFbpzfb)tool.find("from FmFbpzfb where fileId="+zbKey.longValue()+" and tableid='"+b+"' and rowid="+h);
    if(fb==null)  ///数据库中没有这条记录
    {
    fb = new FmFbpzfb();
    fb.setFileId(zbKey);
    fb.setTableid(""+b);           
    }
    break_b = "no";
    break_all = "no";
    for(int l=1;;l++)            ////遍历所有列
    {
    break_b = "no";
    break_all = "no";
    text_name = "f"+b+"_"+h+"_"+l;
    text_name_value = request.getParameter(text_name);
    if(text_name_value==null) text_name_value="";
    if( text_name_value.equals("end") )
    {
    break;
    }else
    if( text_name_value.equals("break") )
    {
    break_b = "yes";
    break;
    }else
    if( text_name_value.equals("over") )
    {
    break_b = "yes";
    break_all = "yes";
    break;
    }
    System.out.println("text_name="+text_name);
    fb.setRowid( new Integer(h) );       
    try{
    method = clas.getMethod("setS"+l,new Class[]{String.class});
    method.invoke(fb,new Object[]{text_name_value.trim()});
    }catch(Exception e)
    {
    System.out.println("更新附表异常="+e.toString());
    }
    }///结束后,保存一行记录
    tool.saveOrUpdate(fb);
    if(break_b.equals("yes"))
    break;
    }
    if(break_all.equals("yes"))
    break;  
         
    }
    return null;
    }}
      

  10.   

    是不是没有写method="post"这句? 如果没写这句,表单如果少还可以,如果多就取不到了。
      

  11.   

    都放到一个页面,内容实在是太多了。以前做项目,表的字段用ACCESS都显示不全(ACCESS好像最多能显示255个字段),遇到过JAVA的64K的问题,就是因为页面太大了,JDK1.4没办法编译,内容太多建议分页处理。