隨筆-39  評論-33  文章-0  trackbacks-0

          如何實現(xiàn)表單一次上傳多表數(shù)據(jù)并更新到數(shù)據(jù)庫

          胡立新

          newxy的標簽<nbean:formBean name=”…” sql=”……”/>會經(jīng)查詢語句得到一formBeanformBean中含有記錄集。如果sql語句是聯(lián)表查詢,formBean中會有來自多個表的數(shù)據(jù)。

          如果用戶在<nhtml:form …>…</nhtml:form>標簽產(chǎn)生的表單中修改了數(shù)據(jù),如何將這些修改后的多表數(shù)據(jù)更新到數(shù)據(jù)庫中。可以利用newxy的標簽<nlogic:action1/><nlogic:action2/>及標簽<nhtml:buttons/><nhtml:button/>來實現(xiàn)。有兩種方法。

          方法一:將<nlogic:action1/>換成<nlogic:action2/>,其path屬性是strutsaction配置的path元素值,通常帶有“.do" 這樣可在后臺Strutsaction中處理。

                  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頁面類似如下:

                  <nlogic:action2 id=”act1” path="/myAction.do"/>

                  <nbean:formBean name="form1" sql="..."/>

                  <nhtml:form action="" formName="form1">

                    <html:hidden property="_table" value="table1"/>

                    ......

                  </nhtml:form>

                  <div><nhtml:buttons actionId="act1"/></div>

          前臺表單中的_table屬性被忽略。如果表單某屬性是table1字段也是table2字段,如聯(lián)表查詢時的id,這個id就會更新到table1table2中。

           

          方法二:讓<nlogic:action1/>更新或插入表table1,在jsp頁面上鑲入java腳本更新或插入其它表。但要理解<nlogic:action1/>執(zhí)行動作的條件。

          <nlogic:action1/>執(zhí)行動作的條件是:訪問jsp頁面的參數(shù)含有_actionId_formName,且值分別等于<nlogic:action1/>id值、formName值。這個<nlogic:action1/>"update""remove"還是其它動作要看參數(shù)method的值是什么。java腳本執(zhí)行條件應與<nlogic:action1/>的條件相同。jsp頁面應類似這樣的:

                  <nlogic:action1 id="act1" formName="form1"/>

                  <%

                    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);       

                    }           

                  %>

                  <nbean:formBean name="form1" sql="..."/>

                  <nhtml:form action="/manager/user/index.jsp" formName="form1">

                    <html:hidden property="_table" value="table1"/>

                    ......

                  </nhtml:form>

                  <div><nhtml:buttons actionId="act1"/></div>

                 

          如果要在一個事務中更新多表,則應使用方法一。如果利用newxy實現(xiàn)事務,可參看newxy的技術文檔有關事務部分。

           

          newxy新坐標技術網(wǎng)站:http://www.newxy.net

           

          posted on 2007-04-09 23:39 newxy新坐標 閱讀(1899) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 蒙城县| 珠海市| 孟州市| 拉萨市| 理塘县| 伊金霍洛旗| 民权县| 邻水| 搜索| 哈尔滨市| 綦江县| 河北区| 清远市| 彰化县| 康乐县| 吴忠市| 怀来县| 武山县| 越西县| 凤凰县| 望奎县| 额尔古纳市| 福建省| 娱乐| 汉源县| 塔河县| 炉霍县| 晋城| 雅安市| 新平| 贺州市| 阿克陶县| 开封县| 新源县| 阳泉市| 什邡市| 会泽县| 黄大仙区| 板桥市| 元氏县| 沈阳市|