我正在尝试使用spring mvc 3.1,tiles 2和jquery对我的网站进行部分渲染.
这是我的春天:
我的瓷砖conf:
如您所见,有一个名为“productSearchResults”的嵌套属性.这是结果页面,我希望通过ajax重新呈现此页面.
我的控制器:
@RequestMapping(params = "search=true",value = "/",method = RequestMethod.POST)
public String searchHandler(@Valid final SearchFormBean searchformBean,final Model model) {
model.addAttribute("productsList",productsService.findProducts(searchformBean.getSearchCriteria()));
return "productsSearch";
}
我的jsps:
productsSearch.jsp:
productSearchResults.jsp:
最后是productSearch.jsp中包含的.js文件:
$('select[id="searchCriteria.resultsSort"]').change(function() {
$.ajax({
type : "POST",url : "/myapp/product/search/",data : "search=true&fragments=productSearchResults",success : function(response) {
$("#search-results").html(response);
},error : function(e) {
alert('Error : ' + e);
}
});
});
事情就是这样:每次我在productsSearchResults.jsp页面中更改“searchCriteria.resultsSort”选择器值时,我都希望重新加载结果图块(不重新加载整个页面).
使用上面给出的代码,我设法重新渲染整个页面(包括html标签……),但不仅仅是感兴趣的部分.
有关如何实现目标的任何暗示?是真的可能还是我误解了部分渲染原理?
最佳答案
我发现了什么问题,所以我回答了我自己的问题……
我刚刚将javascript代码更改为:
$('select[id="searchCriteria.resultsSort"]').change(function() {
$.ajax({
type : "POST",beforeSend : function(req) {
req.setRequestHeader("Accept","text/html;type=ajax");
},success : function(response) {
$("#search-results").html(response);
},error : function(e) {
alert('Error : ' + e);
}
});
});
现在它有效!
由于部分重新渲染,似乎“searchCriteria.resultsSort”选择器不再映射到表单,一旦页面重新加载到屏幕,所以我还要将此行添加到我的控制器:
model.addAttribute("searchCriteria",searchformBean.getSearchCriteria());
就这样 !希望它能帮助其他人.