Pra*_*lar 9 java spring spring-mvc
在Spring MVC中,如何在两个控制器方法之间传递对象?我有一个更新表单和一个updateController.在控制器中我有2个方法,一个用于获取数据并在视图中显示它.当用户单击带有修改的更改的更新按钮时,将调用控制器的第二种方法.我观察到的是我在控制器的第二个方法中得到的对象与我在第一个控制器方法调用中传递给视图的对象不同.它是一个新对象,所有表单字段都映射到它.如何确保将相同的对象传递给第一个控制器方法提供给视图的第二个控制器方法?
@RequestMapping(value = "/showEmpDetail.html", method = RequestMethod.GET)
public String showEmpDetails(
@RequestParam(value = "page", required = false) Integer page,
HttpServletRequest request, @RequestParam("empId") Long empId,
ModelMap model) {
// Get employee using empId from DB
model.addAttribute("emp",emp);
return "showEmpDetail";
}
Run Code Online (Sandbox Code Playgroud)
上述控制器方法从Db获取emp值并在视图中正确显示.现在用户更改了一些细节并单击了提交按钮.调用以下控制器方法.
@RequestMapping(value = "/editEmpFormSubmission.html", method = RequestMethod.POST)
public String editEmpFormSubmission(
@RequestParam(value = "page", required = false) Integer page,
@ModelAttribute("emp") Employee emp, BindingResult result,
ModelMap model, HttpServletRequest request) {
// update changes in DB
}
Run Code Online (Sandbox Code Playgroud)
在上面的控制器方法中,当我检查emp对象时,它与我在之前的控制器调用中传递的对象不同.未形成后备但具有值的字段已更改为null.如何确保视图传递相同的对象.我不想将对象添加为sessionAttribute,因为用户可能会修改会话中的许多员工.
M. *_*num 25
你有3个选择
@SessionAttributes
在请求之间将会话存储在会话中.@ModelAttribute
注释的方法在每个请求之前检索对象@SessionAttributes
注释添加到控制器类SessionStatus
参数添加到update方法和setComplete()
方法中@SessionAttributes("emp")
public class EmployeeController {
@RequestMapping(value = "/editEmpFormSubmission.html", method = RequestMethod.POST)
public String editEmpFormSubmission(
@RequestParam(value = "page", required = false) Integer page,
@ModelAttribute("emp") Employee emp, BindingResult result,
ModelMap model, HttpServletRequest request
SessionStatus status) {
// update changes in DB
status.setComplete();
}
}
Run Code Online (Sandbox Code Playgroud)
@ModelAttribute
showEmpDetails
方法,因为它应该只返回一个视图名称public class EmployeeController {
@ModelAttribute("emp")
public Employee getEmployee(@RequestParam("empdId") Long id) {
// Get employee using empId from DB
return emp;
}
@RequestMapping(value = "/showEmpDetail.html", method = RequestMethod.GET)
public String showEmpDetails() {) {
return "showEmpDetail";
}
}
Run Code Online (Sandbox Code Playgroud)
HttpSession
作为参数showDetails
方法旁边将其添加到模型中,将其添加到会话中editEmpFormSubmission
使用会话中的那个并将所有非空字段从会话复制到该对象并将其存储在数据库中.我不会去选择,我强烈建议选择1特别是包括setComplete()
了上SessionStatus
进行清理对象.你也可以组合1和2(有一个带@ModelAttribute
注释的方法,仍然使用@SessionAttributes
.).
如何确保视图传递相同的对象。我不想将对象添加为 sessionAttribute,因为用户可能会修改会话中的许多员工
您可以在对象中创建一个字段,在初始渲染时填充随机数,然后将该对象存储在会话中。在视图中,您可以使用隐藏输入映射该字段,现在当用户发送编辑操作的请求时,您可以获取该隐藏字段并通过隐藏字段中的数字从会话中获取原始对象。这将解决不同选项卡中的多次编辑冲突。
归档时间: |
|
查看次数: |
36632 次 |
最近记录: |