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

时间:2017-04-18 14:52:14

标签: java html jsp servlets scriplets

我已经动态创建了按钮。

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

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您需要执行以下操作:

  

&lt; input type =“submit”value =“&lt;%name%&gt;” name =“添加预订”   /&GT;