将多行的详细信息从JSP传递给Servlet

时间:2012-04-16 15:38:56

标签: java jsp java-ee servlets

我的JSP文件中有一个Employees列表,对于每个员工,我提供了一个更新位置的选项(下拉列表)。结果传递给“SaveTubeDetails”servlet,它负责保存数据。

这是我目前正在使用的代码:

<form action="SaveTubeDetails" method="POST">
 <table>
 <% 
   for(Iterator<Employee> itr = employeeArr.iterator(); itr.hasNext();){ 
   Employee emp= itr.next();
 %> 

<tr> 
  <td>
  <select name="location">
  <% for(int count=0; count<locArr.size(); count++){ %>     
  <option value="<%= locArr.get(count) %>" ><%= locArr.get(count) %></option>   
  <%} %>
  </select>
  </td> 
</tr>
</table>
</form>

我的问题是,如何将其保存为可以传递给Servlet的员工列表?

注意:我没有使用Spring和Hibernate。而且我知道不会使用scriptlet,但是由于我正在更新现有代码,所以我别无选择。虽然这里只显示了Employee的Location详细信息,但实际上还有更多列,如Age,DOB等。

1 个答案:

答案 0 :(得分:3)

在您的特定示例中,所有提交的值都是HttpServletRequest#getParameterValues()提供的字符串数组,其顺序与HTML标记中显示的输入完全相同。

String[] location = request.getParameterValues("location");
// ...

作为替代方案,您可能需要考虑在输入名称中包含员工ID,以便避免任何潜在的竞争条件(例如,当一个员工在显示表单和之间由不同的最终用户从DB中删除时处理表格提交):

<select name="location_<%=emp.getId()%>">

然后可以基于现有员工列表在servlet中收集,如下所示:

List<Employee> employees = employeeService.list();

for (Employee employee : employees) {
    String location = request.getParameter("location_" + employee.getId());
    // ...
}