无法将List对象作为隐藏变量从JSP传递到servlet

时间:2014-07-09 15:47:09

标签: spring list servlets jstl hidden-field

我正在尝试渲染控制器中的对象列表,这些对象从jsp传递为隐藏的变量。

这是我的代码

我的employeeResults.jsp

中的

<c:forEach items="${list}" var="employee"  >
<tr>
<td>${employee.empId}</td>
<td>${employee.empName}</td>
<td>${employee.empEmail}</td>
</tr>
</c:forEach> 
<form  method="POST"  action="downloadCSV.html" >
<input type="hidden" id="empList" name="empList" value="${list}"/>
<input type="submit" name="download" value="Download"/>
</form>

在我的控制器中

//员工搜索的方法调用

@RequestMapping(value = "/search", params = "search", method = RequestMethod.POST)
public ModelAndView lookupEmployee(@ModelAttribute("command") Employee emp) {

String lookupEmpId = null;
if(emp.getEmpId()!= null)
lookupEmpId = emp.getEmpId();
String[] line = lookupEmpId.split("\n");
List<String> eIds = new ArrayList<String>();

for(String i: line){
eIds.add(i);
}

List<Employee> listEmp = employeeDAO.searchRecords(eIds); 
ModelAndView model = new ModelAndView("lookupResults");  
model.addObject("list",listEmp);
    return model;

}// addContact()

  @RequestMapping(value = "/downloadCSV", method = RequestMethod.POST)
    public void downloadCSV(HttpServletRequest request, HttpServletResponse response) throws       IOException {

    String empList = request.getParameter("empList");
    List<String> items = Arrays.asList(empList.split("\\s*,\\s*"));
    -----
    }

当我运行empList时返回一个数组格式的sting,但我想做的是从jsp获取Employee对象列表。

非常感谢任何帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

这不是将对象保存在隐藏字段中的正确方法。

查看浏览器中的源代码,它可能会显示toString()的默认List<Employee>表示。

<input type="hidden" id="empList" name="empList" value="[pkg.Employee@7b9bd73]"/>

在会话中将其设置为方法lookupEmployee()中的属性,并在downloadCSV()方法中将其恢复。

示例代码:

public ModelAndView lookupEmployee(HttpServletRequest request,@ModelAttribute("command") Employee emp) {
     ...
     List<Employee> listEmp = employeeDAO.searchRecords(eIds); 
     request.getSession().setAttribute("empList", listEmp);
     ...
}

public void downloadCSV(HttpServletRequest request, HttpServletResponse response) throws IOException {
     List<Employee> empList = (List<Employee>)request.getSession().getAttribute("empList");
     ...
}

修改

  

我不想为此使用会话范围,我正在寻找任何其他替代选项

使用JSON字符串在服务器和客户端之间传输对象。

使用任何JSON解析库(例如GSON library)从JSON字符串形成JAVA对象,反之亦然。

请查看此Example