在表单中有多个提交按钮,并确定在控制器中按下了哪些按钮

在我的Spring应用程序中,我有一个jsp,它有一个表单,我希望有多个提交按钮转到同一个控制器。 我需要能够确定控制器中按下了哪个按钮。 表单向用户显示多个项目,他们可以选择其中一个项目,唯一的区别是所选项目的ID。

在jsp中,我正在创建这样的表单:

${item.description}

但是,这在日志中给出了“数据绑定错误:1”消息,并且表单未提交给控制器。

我尝试将myCommand.id从int更改为String,但是当它提交时的值是id1,id2,id3 …(逗号分隔列表中的所有ID),无法确定按下了哪个按钮。 我不希望必须为每个按钮指定不同的操作,因为项目数量可以增长,并且它们的操作完全相同,只是使用不同的ID。

如何在此表单中使用多个按钮并获取控制器中的值?

为什么不为每个项目使用单独的表格?

   ${item.description}     

你有3个选择 –
1.使用多个表单,并在每个表单中有一个提交按钮,如上所述。 生成的代码看起来不是很漂亮,在页面中有多个表单通常被认为是不好的做法。
2.按下提交按钮时,使用Javascript hack设置隐藏变量。
3.如果你必须处理后备(没有JavaScript),那么有一种迂回的方法来找出点击了哪个按钮。 这是一个例子 –

   ${item.description}    

这为每个按钮设置了唯一的ID。 由于请求参数作为键值对,我们必须在这种情况下进行反向查找,因为我们在键位置有值。 这是它的java方面..不确定这是否是最有效的方法,但它的工作原理。

 String searchButtonName(final HttpRequest request) { String buttonName = ""; Map paramMap = request.getParameterMap(); if (MapUtils.isNotEmpty(paramMap)) { for (Map.Entry entry : paramMap.entrySet()) { /* Search for the button name as given in the 'value' attribute for the input tag */ if ("Select".equals(entry.getValue()[0])) { buttonName = entry.getKey(); break; } } } return buttonName; } 

而不是使用提交按钮使用一个按钮,该按钮调用设置隐藏字段值的函数并调用form.submit()

你可以使用循环生成按钮

您可以在控制器的参数列表中使用注释参数@RequestParam("SelectButton") String submit