【发布时间】:2021-12-29 14:06:04
【问题描述】:
我在控制器中有一个方法,它从 jsp 获取 Flavor 对象。然后,此控制器返回一个页面 (edit-flavor.jsp),用户可以在其中更改有关此 Flavor 对象的一些内容,并可以选择保存或取消编辑。
我怎样才能使当用户单击取消时,我添加到模型中的风味对象不会受到更改的影响?
@Controller
@SessionAttributes("iceCreamList")
@RequestMapping("/icecream*")
public class IceCreamController {
@GetMapping("/new-flavour")
public String showNewFlavourForm(Model model) {
if (model.getAttribute("iceCreamList") == null) {
model.addAttribute("iceCreamList", new IceCreamList());
}
return "/icecream/new-flavour";
}
从new-flavour.jsp,当用户点击Add flavor btn,我们去:
@PostMapping("/addFlavour")
public String addFlavour(Model model,
@ModelAttribute("iceCreamList") IceCreamList flavours,
@Valid @ModelAttribute("flavour") Flavour flavour,
BindingResult result) {
if(result.hasErrors()) {
return "/icecream/new-flavour";
}
//I save the new flavour so that the whole list of
//flavours can be displayed in show-flavours.jsp
flavours.addFlavour(flavour);
model.addAttribute("flavours", flavours);
return "/icecream/show-flavours";
}
show-flavors.jsp 包含一个表格,其中每一行显示一种风味和 有一个按钮来修改味道。
当点击修改 btn时,我们会去:
@PostMapping("/modifyFlavour")
public String modifyFlavour(Model model,
@ModelAttribute("iceCreamList") IceCreamList flavours,
@ModelAttribute Flavour flavour){
flavours.remove(flavour);
model.addAttribute(flavour);
return "/icecream/edit-flavour";
}
edit-flavour.jsp 本质上是 与 new-flavour.jsp 相同,但字段 已经充满了我的味道 想要编辑。
修改风味后,用户可以 选择保存更改或 取消它们。这是控制器方法 处理那部分:
@PostMapping("/editFlavour")
public String editReservationCustomer(Model model,
@ModelAttribute("iceCreamList") IceCreamList flavours,
@Valid @ModelAttribute("flavour") Flavour modFlavour,
BindingResult result,
@RequestParam("action") String action) {
if(action.equals("save")) {
if (result.hasErrors()) {
return "/icecream/edit-flavour";
}
//I add the new modified flavour to the list
flavours.addFlavour(modFlavour);
return "/icecream/show-flavours";
}else if (action.equals("cancel")) {
\\What to do here??
}
}
}
如您所见,我通过将 IceCreamList 中的对象从列表中删除来编辑它,从而使用户可以更改它 然后将其重新添加到列表中。
但是,如果用户更改了某些内容并且 然后点击取消,更改 已经影响了 Flavor modFlavour 所以我只有修改后的风味对象,并且丢失了对原始对象的所有引用。
【问题讨论】:
-
@JDK 共享
/icecream/edit-flavour的控制器,必须进行更改
标签: java spring-mvc jsp