在 Servlet 中按下了哪个动态创建的按钮

Which dynamic created button was pressed in Servlet

我动态创建了按钮。

<form action="/" method="post">
    <table cellpadding="4">
        <%
            List<Room> rl = (List<Room>) request.getAttribute("roomList");
            if(rl != null) {
                for (Room r : rl) {
                    String name = r.getName();
        %>
            <tr>
                <td><%=name%></td>
                <td><input type="submit" value="Add a Booking" name=<%=name%> /></td>
            </tr>
        <%
                }
            }
   %>
   </table>

我知道用下面的代码点击了哪个按钮;

String addButton = req.getParameter("addButton");

但是,在这种情况下,我无法知道按钮的名称。因为按钮的名称可以是任何名称。我怎么知道按下了哪个按钮?提前致谢!

您需要执行以下操作:

<input type="submit" value="<%name%>" name="Add Booking" />

您可能至少有两个解决方案:

1.服务器端 Java 代码中的解决方案
在 JSP 中,每个提交按钮都将使用 submit_ 前缀命名

<input type="submit" value="Add a Booking" name=<%="submit_"+name%> />

当请求发送到服务器时,您将循环参数并搜索具有此前缀的参数,将其值保存到 submit 属性:

private void setSubmitValue(HttpServletRequest request) {
  String SUBMIT_PREFIX = "submit_";
  for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) {
    String key = (String) e.nextElement();
    if (key.startsWith(SUBMIT_PREFIX)) {
      String value = key.substring(SUBMIT_PREFIX.length());
      request.setAttribute("submit", value);
      break;
    }
  }
}

2。 Java客户端(浏览器)端的脚本解决方案
在表单中引入新的隐藏小部件,它将保存点击房间的数量。单击按钮时,其值存储在该小部件中。
发送请求时,在服务器端您只需读取该参数(小部件名称)的值。
下面是一个示例:room-nr 将具有单击按钮的值

var form = document.forms['add-room'];
$(form).on('click', 'button', function(e) {
  e.preventDefault();
  var name = $(this).attr('name')
  form['room-nr'].value = name.replace(/\D+/, '');
  console.log(form['room-nr'].value);
  //form['add-booking'].click();
});
.hide {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form name="add-room" action='.'">
  <input type="hidden" name="room-nr" value="" />
  <table cellpadding="4">
    <tr>
      <td>room1</td>
      <td>
        <button type="button" name="room-1">Add</button>
      </td>
    </tr>
    <tr>
      <td>room2</td>
      <td>
        <button type="button" name="room-2">Add</button>
      </td>
    </tr>
    <tr>
      <td>room3</td>
      <td>
        <button type="button" name="room3">Add</button>
      </td>
    </tr>
  </table>
  <input type="submit" value="Add a Booking" name="add-booking" class="hide" />
</form>