html - 表行上的单选按钮组

标签 html jsp servlets

我有一组单选按钮,每个单选按钮代表一个操作,每行都有一个 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>

会给你一张表格

enter image description here

它将使用 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();
            }
        }
    });
}

打印结果

enter image description here

Ps:不要定义像这样的数据类,the use of scriplets is highly discouraged ,您应该单独创建数据类,并尽量避免在 JSP 中使用 Java 代码,我仅将其用于演示目的

关于html - 表行上的单选按钮组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38731057/

相关文章:

html - 移动网页设计 HTML ul 在旋转设备时影响其下方的图像

javascript - 滚动经过另一个 div 中的 anchor 后使 div 变得可见?

html - 调整背景图像大小

java - Servlet RequestDispatcher 不转发

java - 将数据从 swing 发送到 Servlet

java - 将变量分配给 HTML 中的值

javascript - 自定义过滤 knockout js observableArray

mysql - 我想在我的 Springboot 项目中实现 session (HTTP 请求)概念,但它给出了这个错误

java - Java Web应用程序i18n

java - 从 Servlet/Filter 重定向不起作用