yang649459172 2012-11-05 17:27
浏览 240
已采纳

struts1 一次提交多个ActionForm

 [size=medium]JSP中有两个[b]actionform[/b]放在同一个form中,分别对应两个数据库表,现在用的是struts1,如何实现在同一个form中提交,交给后台的action处理?[/size]
  • 写回答

1条回答 默认 最新

  • blogzhoubo 2012-11-05 21:22
    关注

    1)
    如果只提交一次form,然后调用对应的action,然后在action里面进一步把form中的值取出来,然后插入或者更新到两张数据库表中的话,可以采用下面的方式。

    复用已有的两个form bean,让其中的一个form bean继承自另一个form bean。比如:

    public class MyForm2 extends ActionForm{

    }

    public class MyForm1 extends MyForm2{

    }

    然后在struts-config.xml里面只配置MyForm1即可。



    public class MyAction extends Action {
    public ActionForward execute(
    ActionMapping mapping,ActionForm form,
    HttpServletRequest request, HttpServletResponse response) throws Exception {
    MyForm1 myForm = (MyForm1) form;
    }
    }

    最好还是单独定义一个form bean,里面包含所有的form项目,这样比较好理解,毕竟MyForm1和MyForm2没有继承关系。

    2)
    如果希望一次提交给两个action,然后两个action里面分别对各自的数据库表进行操作的话,可以采用下面的方式。

    在JSP中定义两个form,分别存储两个actionform对应的项目,然后只在其中的一个form里面设置提交按钮(type不要设置成submit),点击按钮的时候调用自定义的一个javascript方法,然后在这个function里面进行表单的提交。具体如下:

    先通过ajax对第一个form进行submit,提交成功的话,再提交第二个form,因为第一个form是ajax异步提交,所以提交以后画面不会刷新,如果希望画面跳转的话,第二个form不采用ajax提交,而是采用传统的同步提交的方式。这样点击一次按钮,实际进行了两次提交,后台会串行调用两个action。因为是两个action,这样两个数据库表的操作无法放到同一个事务中。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据