有 Java 编程相关的问题?

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

如果调用验证器,java Spring 2.5表单验证动态数据是否丢失?

我有一个简单的表单,它有一个由数据库填充的选择框。触发验证时,选择框为空。我是春天的新手,似乎错过了什么

谢谢你的帮助?提前谢谢

在下面的控制器站点中是动态内容

@RequestMapping("/registration/registration.html")
public ModelMap setupRegistrationForm(HttpServletRequest request, RegistrationForm form) {
    ModelMap map = new ModelMap();
    I18NSite[] sites = new Sites().getSites();
    map.put("sites", sites);
    return map;
}

@RequestMapping(value="/registration/registration.html", method = RequestMethod.POST)
public String saveRegistrationForm(HttpServletRequest request,RegistrationForm form, BindingResult errors) {
    I18NSite site = Sites.getSite(); 
    RegistrationFormValidator validator = new RegistrationFormValidator();
    validator.setDataSource(site.getDataSource());
    validator.validate(form,errors);

    if (errors.hasErrors()) {
        return "registration/registration";
    } else {
        // other code
    }

    return "redirect:/index.html";
}

共 (1) 个答案

  1. # 1 楼答案

    不确定这是否有帮助,但您是否尝试过通过使用@modeldattribute注释公开您的引用数据,以便创建selectbox的数据?这应该类似于以下代码段:

    @ModelAttribute("countries")
    public List getAllCountries() {
        return geoService.getAllCountries();
    }
    

    或者在您的情况下:

    @ModelAttribute("sites")
    public List getSites() {
        I18NSite[] sites = new Sites().getSites();
        return Arrays.asList(sites);
    }
    

    这也是一个非常重要的问题,我花了很长时间才弄明白:

    请记住,您的“支持bean”,即绑定到注册表单表单字段的pojo,应该存在更长的时间!而不仅仅是一个请求的持续时间。它,这意味着永远!在调用另一个SpringMVC控制器之前,应该存在相同的实例。因此,RegistrationForm实例不仅在设置和显示from之后立即存在,而且在提交POST请求并且RegistrationForm实例由Spring填充表单数据时,它应该仍然存在。您可以通过以下类级注释来实现这一点:

    // Example for your case... 
    @Controller
    @SessionAttributes("registrationForm")
    public class RegistrationController {
       ...
    }
    

    I was googling around for this one for days (REALLY!) - so I really recommend to read this blog entry I found sometime ago. It helped me out of all that Spring MVC documentation hell ;-)

    希望这有帮助;-)