【问题标题】:Which dynamic created button was pressed in Servlet在 Servlet 中按下了哪个动态创建的按钮
【发布时间】:2017-09-14 11:44:43
【问题描述】:

我已经动态创建了按钮。

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

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

【问题讨论】:

  • 您的代码中只有一个提交按钮,为什么还要期待更多?
  • 感谢您的评论,但它在“for (Room r : rl)”循环内。会有一个或多个
  • 我明白了,请在下面查看我的答案。

标签: java html jsp servlets scriptlet


【解决方案1】:

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

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。在客户端(浏览器)端使用 JavaScript 的解决方案
在表单中引入新的隐藏小部件,该小部件将保存点击的房间数量。单击按钮时,其值存储在该小部件中。
发送请求时,在服务器端您只需读取该参数的值(小部件名称)。
下面是一个示例: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>

【讨论】:

  • 效果很好,只是多了一个问题。有时,name 属性通过空格获取值,例如; “1号房间”。有了这个值; name 属性显示为“name="submit_Room" 1”。我该怎么办?
  • 我建议在提交时对表单数据进行编码并在服务器端解密。您可以在 Internet 上找到更多相关信息,例如 here
【解决方案2】:

您需要执行以下操作:

【讨论】:

  • 但我想知道按的是哪一个。在这个情况下;我会得到 5 个同名的按钮。
  • 唯一值 会告诉你。
  • 谢谢!它工作正常,但是,现在所有 Button 的文本都是废话。
猜你喜欢
  • 2010-11-06
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2012-09-08
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多