Spring 将列表对象作为隐藏变量从JSP传递到servlet时出现问题
我试图在我的控制器中呈现一个对象列表,这些对象作为隐藏变量从jsp传递 这是我的密码 在my employeeResults.jsp中Spring 将列表对象作为隐藏变量从JSP传递到servlet时出现问题,spring,list,servlets,jstl,hidden-field,Spring,List,Servlets,Jstl,Hidden Field,我试图在我的控制器中呈现一个对象列表,这些对象作为隐藏变量从jsp传递 这是我的密码 在my employeeResults.jsp中 <c:forEach items="${list}" var="employee" > <tr> <td>${employee.empId}</td> <td>${employee.empName}</td> <td>${employee.empEmail}</td>
<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>
${employee.empId}
${employee.empName}
${employee.empEmail}
在我的控制器中
//用于员工搜索的方法调用
@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*"));
-----
}
@RequestMapping(value=“/search”,params=“search”,method=RequestMethod.POST)
公共模型和视图查找员工(@modeldattribute(“命令”)员工emp){
字符串lookupEmpId=null;
if(emp.getEmpId()!=null)
lookupEmpId=emp.getEmpId();
String[]line=lookupEmpId.split(“\n”);
List eIds=new ArrayList();
用于(字符串i:行){
添加(i);
}
List listEmp=employeeDAO.searchRecords(EID);
ModelAndView模型=新的ModelAndView(“lookupResults”);
model.addObject(“list”,listEmp);
收益模型;
}//addContact()
@RequestMapping(value=“/downloadcv”,method=RequestMethod.POST)
public void downloadCSV(HttpServletRequest请求,HttpServletResponse响应)引发IOException{
字符串empList=request.getParameter(“empList”);
列表项=数组.asList(empList.split(“\\s*,\\s*”);
-----
}
当我运行empList时,它返回一个数组格式的sting,但我想做的是从jsp获取Employee对象列表
非常感谢您的帮助
提前谢谢 这不是在隐藏字段中保存对象的正确方法 查看浏览器中的源代码,它可能会显示类似于
列表的默认toString()
表示形式
编辑
我不想为此使用会话范围,我正在寻找任何其他替代选项
使用字符串在服务器和客户端之间传输对象
使用任何JSON解析库,例如从JSON字符串和JSON字符串形成JAVA对象
请看一看这个HTTP协议不知道也不关心Java。HTTP请求参数是字符串,无法使其成为Employee对象。HTTP甚至没有对象的概念。为什么要将员工从浏览器传递到服务器。员工信息应存储在数据库中。您应该只需要发送员工的ID,服务器就可以从数据库中获取他们。您可以编辑您的问题以包含额外的代码。欢迎来到SO。@JB Nizet:实际上我正在jsp中显示员工结果,我在同一个jsp中有下载CSV选项,以便将结果保存到CSV文件中。因此,我试图将列表从jsp发送到controller。因此,当用户单击下载链接时,再次从数据库中获取部署结果,与您在jsp上显示结果的方式相同,但是生成一个CSV而不是HTML页面。我刚刚尝试了这种方法,但是empList返回nullsave in session as attribute并在deonloadCSV()方法中从session获取。谢谢,它成功了!但我不想为此使用会话范围,我正在寻找任何其他替代选项。使用一些第三方缓存,如Infinispan、EHCache等。使用GSON或JSON,将解析后的JSON字符串发送到客户端并发送回服务器。
<input type="hidden" id="empList" name="empList" value="[pkg.Employee@7b9bd73]"/>
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");
...
}