【发布时间】:2015-05-06 09:58:44
【问题描述】:
我在将“分组”数据从 HTML 表单检索到 servlet 时遇到问题。我将描述下面的场景。
在公司中,他们每月记录一次员工的工资。记录时,他们不会通过访问每个员工的个人“资料”(或根据系统的任何内容)来记录。相反,他们所做的是将所有人的薪水应用到一个页面中。
为了做上述事情,他们更喜欢 Excel 之类的表格。
现在,我有一个 html 表单,表单内容是一个表格。一排专用于一名员工。
下面是我的表格。
<%--
Document : index2
Created on : Mar 5, 2015, 10:04:45 AM
--%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
<form method="post" action="EmployeeSampleServlet">
<table border="1" style="width:100%">
<thead>
<th>Name</th>
<th>Position</th>
<th>Salary</th>
</thead>
<tbody name="tableBody" value="1">
<tr>
<td><input type="text" name="nameTxt" style="width:100%"/></td>
<td><input type="text" name="positionTxt" style="width:100%"/></td>
<td><input type="text" name="salaryTxt" style="width:100%"/></td>
</tr>
</tbody>
<tbody name="tableBody" value="2">
<tr>
<td><input type="text" name="nameTxt" style="width:100%"/></td>
<td><input type="text" name="positionTxt" style="width:100%"/></td>
<td><input type="text" name="salaryTxt" style="width:100%"/></td>
</tr>
</tbody>
<tbody name="tableBody" value="3">
<tr>
<td><input type="text" name="nameTxt" style="width:100%"/></td>
<td><input type="text" name="positionTxt" style="width:100%"/></td>
<td><input type="text" name="salaryTxt" style="width:100%"/></td>
</tr>
</tbody>
<tbody name="tableBody" value="4">
<tr>
<td><input type="text" name="nameTxt" style="width:100%"/></td>
<td><input type="text" name="positionTxt" style="width:100%"/></td>
<td><input type="text" name="salaryTxt" style="width:100%"/></td>
</tr>
</tbody>
<tbody name="tableBody" value="5">
<tr>
<td><input type="text" name="nameTxt" style="width:100%"/></td>
<td><input type="text" name="positionTxt" style="width:100%"/></td>
<td><input type="text" name="salaryTxt" style="width:100%"/></td>
</tr>
</tbody>
</table>
<br/>
<input type="submit" value="Submit">
</form>
</body>
</html>
如您所见,我用<tbody> 包裹了每一行。 <tbody> 的 value 属性将包含员工 ID。
一旦表单被提交,下面的 servlet 就会捕获它。
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class EmployeeSampleServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String[]empId = request.getParameterValues("tableBody");
for(int i=0;i<empId.length;i++)
{
out.println(empId[i]);
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
我正在尝试获取<tbody> 的value 属性(这样我就可以识别员工的ID)并获取<tbody> 中的数据。但是这不起作用,因为我最终得到了NullpointerException,因为它未能读取<tbody> 值。
那么,我如何将数据从表传递到 servlet,它可以清楚地理解一行代表数据属于一个员工?如果这不是这样做的方法,我也愿意接受其他方法。
【问题讨论】:
-
您可以在输入隐藏元素中写入员工 id .. 在提交表单时可以自动将其传递给 servlet。 标签没有属性名称和值。@BrijeshBhatt:我认为你没有明白我的意思。即使我这样做了,我怎样才能找到该行中的其余列是否属于同一个id?我认为您需要员工 id 作为我在上面编写的 servlet 中的参数。但是您要说的是,为此,您必须使用 javascript 或 jquery 准备一个查询字符串,然后将其发布到 servlet。这将解决您的问题。你错了。 tbody 不是文本框或复选框之类的元素,您无法从表单中获取值。你只需要身份证?因此您可以将其用于业务逻辑。否则你需要整行?@VinothKrishnan:整行,可以识别该行属于哪个员工。
标签: java html jsp servlets web-applications