Spring MVC:@valid验证失败:返回同一页面

时间:2015-08-31 21:03:28

标签: spring spring-mvc model-view-controller

所以,

我有Spring MVC,@ Valid注释。

在我的主页上,我有搜索框,当我们访问该页面时,页面上打印了一些其他stuf,这是从数据库中读取的,

现在,当有人点击搜索按钮而没有放任何文本框时,.hasErrors()为true并返回" index"这是同一页。

问题是,当我回到同一页面时,只有搜索框和搜索按钮以及错误消息,但其他所有内容(从数据库中读取的内容)都不再可见。

可能是因为它不是由相同的控制器方法提供服务,但我该如何保持页面相同?

填充初始视图的方法:

@RequestMapping(value = "/" , method = RequestMethod.GET)
    public String indexPage(Model model, HttpServletRequest request){
        List<Ad> ads = adDao.getAll();
        model.addAttribute(ads);
        // this below is added for data binding.
        model.addAttribute("adSearchForm",new AdSearchForm());
        return "index";
    }

有人试图搜索的方法

@RequestMapping(value = "/search", method = RequestMethod.POST)
    public String searchAds(Model model,@Valid @ModelAttribute("adSearchForm")  AdSearchForm adSearchForm,
                            BindingResult result,
                            HttpServletRequest request
                            ){
       if(result.hasErrors()){
            return "index";
       }
       List<Ad> ads =  adDao.searchAds(adSearchForm.getSearchTerm());
       model.addAttribute("searchresults",ads);
       return "searchResults";
    }

所以当提供/搜索请求时,上面第一种方法读取的数据在索引页面上不可见。

1 个答案:

答案 0 :(得分:1)

它只是这样工作。当我有超过2/3个元素需要添加到模型中并且有一些带有绑定结果的表单时,我通常会创建这样的私有方法:

private void initModel(Model model)
{
    model.addAttribute("attr1", //getAttrFromDb
    model.addAttribute("attr2", //getAttrFromDb
    //more attributes...
}

并在GET和POST方法中使用它。