我有一组单选按钮,每个单选按钮代表一个操作,每行都有一个 ID。我正在使用值(value)来复合两者。我的 servlet 可以处理这个问题,但我想知道是否有更好的方法将操作与 id 分开并仍然让 servlet 接收它们?
<td class="listData"><input type="radio" value="insert-${data.Id}" name="recordIds${data.Id}" id="${data.Id}"/></td>
<td class="listData"><input type="radio" value="update-${data.Id}" name="recordIds${data.Id}" id="${data.Id}"/></td>
<td class="listData"><input type="radio" value="delete-${data.Id}" name="recordIds${data.Id}" id="${data.Id}"/></td>
最佳答案
正如 Naga Sai A 指出的那样,HTML 文档中不应该有重复的 id 值。因此请确保每个输入都有唯一的 id。
如果我理解正确,您不需要为您的案例中的每行数据使用不同的值。您只需要为它们使用不同的名称:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Arrays" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Change Data</title>
</head>
<body>
<%!
public class Data {
private int id;
public Data(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
List<Data> dataList = Arrays.asList(new Data(10), new Data(11), new Data(12));
%>
<% request.setAttribute("dataList", dataList); %>
<c:url var="controller" value="/controller"/>
<p>Choose your actions for data</p>
<form action="${controller}" method="POST">
<table>
<thead>
<tr>
<td>insert</td>
<td>update</td>
<td>delete</td>
</tr>
</thead>
<tbody>
<c:forEach var="data" items="${dataList}">
<tr>
<td>
<label for="insert-${data.id}">Insert ${data.id}: </label>
<input type="radio" name="recordIds${data.id}" value="insert" id="insert-${data.id}"/>
</td>
<td>
<label for="update-${data.id}">Update ${data.id}: </label>
<input type="radio" name="recordIds${data.id}" value="update" id="update-${data.id}"/>
</td>
<td>
<label for="delete-${data.id}">Delete ${data.id}: </label>
<input type="radio" name="recordIds${data.id}" value="delete" id="delete-${data.id}"/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="Submit actions">
</form>
</body>
</html>
会给你一张表格
它将使用 doPost() 方法将其输入重定向到 servlet
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Collections.list(request.getParameterNames()).forEach(paramName -> {
if (paramName.startsWith("recordIds")) {
String id = paramName.substring(9, paramName.length());
String action = request.getParameter(paramName);
try {
response.getWriter().println("Selected action for data with id=" + id + " is " + action);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
}
打印结果
Ps:不要定义像这样的数据类,the use of scriplets is highly discouraged ,您应该单独创建数据类,并尽量避免在 JSP 中使用 Java 代码,我仅将其用于演示目的
关于html - 表行上的单选按钮组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731057/