在 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>
我动态创建了按钮。
<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>