如何保持jsp中的modelattribute值?

时间:2018-09-24 18:22:52

标签: spring spring-boot spring-security

我有一个名为product.jsp的jsp页面。 onload jsp页面,我需要填充许多下拉列表和其他列表。但是它以表格形式提交成功或失败,清除所有文本字段。  我想保持价值直到我清除。这是我使用的过程。当我提交它时,它会重定向同一页面,但modelattribute值将为null。我想保留modelattribute值

  1. 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>
    
  2. 这是控制器。

     @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");
    
      }
    
    }
    

    请帮助我

1 个答案:

答案 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);