所以,
我有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";
}
所以当提供/搜索请求时,上面第一种方法读取的数据在索引页面上不可见。
答案 0 :(得分:1)
它只是这样工作。当我有超过2/3个元素需要添加到模型中并且有一些带有绑定结果的表单时,我通常会创建这样的私有方法:
private void initModel(Model model)
{
model.addAttribute("attr1", //getAttrFromDb
model.addAttribute("attr2", //getAttrFromDb
//more attributes...
}
并在GET和POST方法中使用它。