如何实现表单一次上传多表数据并更新到数据库

 
如何实现表单一次上传多表数据并更新到数据库
胡立新
newxy的标签会经查询语句得到一formBean,formBean中含有记录集。如果sql语句是联表查询,formBean中会有来自多个表的数据。
如果用户在标签产生的表单中修改了数据,如何将这些修改后的多表数据更新到数据库中。可以利用newxy的标签及标签 来实现。有两种方法。
方法一:将换成,其path属性是struts某action配置的path元素值,通常带有“.do"。 这样可在后台Struts的action中处理。
        BaseDAO baseDao=new BaseDAO();
        DynaDto dto=(DynaDto)formBean.getDto();
        //保存第一个表
        dto.set_table(“table1”);
        baseDao.update(dto);
        //保存第二个表
        dto.set_table(“table2”);
        baseDao.update(dto);
        //保存第三个表
        dto.set_table(“table3”);
        baseDao.update(dto);
   
如果查询结果使用了别名,如select a.field1 as f1,... from table1 a,...,则在update前应作处理,如下:
        dto.set_table(“table1”);
        dto.set('field1',dto.get('f1'));
        baseDao.update(dto);
前台jsp页面类似如下:
       
       
       
         
          ......
       
       
前台表单中的_table属性被忽略。如果表单某属性是table1字段也是table2字段,如联表查询时的id,这个id就会更新到table1和table2中。
 
方法二:让更新或插入表table1,在jsp页面上镶入java脚本更新或插入其它表。但要理解执行动作的条件。
执行动作的条件是:访问jsp页面的参数含有_actionId、_formName,且值分别等于的id值、formName值。这个是"update"、"remove"还是其它动作要看参数method的值是什么。java脚本执行条件应与的条件相同。jsp页面应类似这样的:
       
        <%
          String _actionId=request.getParameter("_actionId");
          String _formName=request.getParameter("_formName");
          if("act1".equals(_actionId) && "form1".equals(_formName)){
              net.newxy.struts_faces.DynaFormBean formBean=(net.newxy.struts_faces.DynaFormBean)session.getAttribute("form1");
              BaseDAO baseDao=new BaseDAO();
              DynaDto dto=(DynaDto)formBean.getDto();
 
              //保存第二个表 第一个table1由标签更新了。
              dto.set_table(“table2”);
              baseDao.update(dto);
              //保存第三个表
              dto.set_table(“table3”);
              baseDao.update(dto);       
          }           
        %>
       
       
         
          ......
       
       
       
如果要在一个事务中更新多表,则应使用方法一。如果利用newxy实现事务,可参看newxy的技术文档有关事务部分。
 
newxy新坐标技术网站: http://www.newxy.net
 
 

你可能感兴趣的:(newxy,java,数据库)