我有一个名为product.jsp的jsp页面。 onload jsp页面,我需要填充许多下拉列表和其他列表。但是它以表格形式提交成功或失败,清除所有文本字段。 我想保持价值直到我清除。这是我使用的过程。当我提交它时,它会重定向同一页面,但modelattribute值将为null。我想保留modelattribute值
Jsp页面
<form:form method="POST" action="/productSetup/add" modelAttribute="productForm">
<spring:bind path="name">
<input type="text" class="form-control" id="name" name="name" value="${productForm.name}" />
</spring:bind>
这是控制器。
@Controller
@RequestMapping("/productSetup")
public class ProductController {
@RequestMapping(value = "", method = RequestMethod.GET)
public ModelAndView index(Model model) {
ModelAndView modelAndView = new ModelAndView("product");
model.addAttribute("getCategoryList", dao.getCategoryList());
model.addAttribute("productForm", new ProductModel());
return modelAndView;
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public ModelAndView usrReg(@ModelAttribute("productForm") ProductModel productModel, Errors error, Model model,
HttpSession session,RedirectAttributes redir,BindingResult result) {
ModelAndView modelAndView = new ModelAndView("product");
redir.addFlashAttribute("productForm", productModel);
return new ModelAndView("redirect:/productSetup");
}
}
请帮助我
答案 0 :(得分:2)
您正在发布表单,并将其重定向到get。 问题在于您总是在创建新的模型属性:
model.addAttribute("productForm", new ProductModel());
您应该检查RedirectAttributes是否包含“ productForm”并添加它。
Object productForm = redirectAttributes.getFlashAttributes().get("productForm");
if(productForm == null){
productForm = new ProductModel();
}
model.addAttribute("productForm", productForm);
这仅在第一个重定向上有效,第二个访问将不包含该属性。如果要在连续的get请求之间保留数据,则应将其保存在会话中。 在您的发布方式中,您可以替换
redir.addFlashAttribute("productForm", productModel);
与:
session.setAttribute("productForm", productModel);
并在您的获取请求中
Object productForm = session.getAttribute("productForm");
if(productForm == null || !(productForm instanceOf ProductModel)){
productForm = new ProductModel();
}
model.addAttribute("productForm", productForm);