有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当表单在基于spring3注释的控制器中验证失败时,java引用数据将丢失

我正在做基于Spring3注释的控制器。问题是,当验证失败时,参考数据就丢失了,即数据。我没有把它放在表单中,因为它不是用户可编辑的数据,这里的正统说法是只有用户可编辑的数据才会放在表单中。我还有别的选择吗

@Controller
public class MyInfoController {

   @Autowired
    private MyInfoFormValidator validator;

 private void loadReferenceData(ModelMap model) {
        model.put("countryDivisions",countryDivisionService.getCountryDivisionOrderedByCode());
    }

  @ModelAttribute
    private MyInfoForm loadMyInfo() {
        MyInfoForm form = new MyInfoForm();
     //load it up
    return form;
    }


    @RequestMapping(value="/editMyInfo", method = RequestMethod.GET)
    public String editMyInfo(ModelMap model ) {
        loadReferenceData(model);
        return "contactEdit";
    }

  @RequestMapping(value="/editMyInfo", method = RequestMethod.POST)
    public String saveMyInfo(ModelMap model, MyInfoForm form,BindingResult result ) {
        validator.validate (form,result);
        if (result.hasErrors()) {
            model.put("commandName", "myInfoForm");
            return "contactEdit";
        }
         //save some stuff
        return "redirect:viewMyInfo";
    }

}

共 (2) 个答案

  1. # 1 楼答案

    为什么不直接做呢

        if (result.hasErrors()) {
            model.put("commandName", "myInfoForm");
            loadReferenceData(model);
            return "contactEdit";
        }
    
  2. # 2 楼答案

    您应该在注释@ModelAttribute的帮助下提供参考数据,比如CountryDivisions。这有一个很大的优势,即你不需要一遍又一遍地重复自己,并且在多个方法中提供相同的数据

    作为你的例子,我将提供如下内容:

    @ModelAttribute("countryDivisions")
    public List<CountryDivision> populateCountryDivisions() {
        return countryDivisionService.getCountryDivisionOrderedByCode();
    }
    

    这使您的视图能够访问名为“countryDivisions”的模型属性,该属性包含“CountryDivision”列表,即服务方法从“countryDivisionService”提供的对象