通常如果我必须动态添加一些html代码,我想从视图加载JQuery,然后使用@ResponseBody从控制器渲染一个ModelAndView,因为我相信从Javascript添加静态html是不可读的并且不可重复使用。 现在我有一个做Ajax调用的情况我需要从控制器检查一些值然后渲染一个带有一些值的映射,或者渲染一个html代码添加到DOM中。所以我一直在考虑ModelAndView的工作原理,以及如何在viewManagement上添加要处理的视图,但只有在我决定附加该数据时才进行渲染。 所以想象一下,我希望有一个带有这个值的地图
Map<String, Object> map = new HashMap<>
map.add("status", "1")
在另一种情况下
Map<String, Object> map = new HashMap<>
map.add("status", "2")
map.add("rowErros", "WEB-INF/row_errors.jsp")
然后在视图中
success:function(data)
if(data.status=="2") $("#rowErrorsTable tbody tr:last").after(data.rowErros);
问候。
答案 0 :(得分:0)
我不同意在客户端代码中包含标记本身不太可读或可重用,但无论如何,我不确定为什么你会选择将ModelAndView用于此用例。您可以使用成功和错误回调在前端完成此操作,并从控制器方法返回适当的HTTP响应代码:
@Request(value="/foo")
public ResponseEntity<String> foo() {
if (conditionIsMet()) {
return new ResponseEntity<String>("", HttpStatus.OK); // Or some simple JSON string
} else {
return new ResponseEntity<String>(HttpStatus.BAD_REQUEST);
}
}
在前端:
success: doSuccess,
error: function() { $('#error').load('/error.jsp'); } // Optionally sniff for the incoming status code
假设您的错误案例远不如您的成功案例那么频繁,那么您也是:
error.jsp
标记相关的带宽; 如果您在错误有效负载中需要其他信息,请考虑一个JSON对象,该对象提供有关错误的前端信息,而不仅仅是HTTP状态代码本身提供的信息。在许多情况下,这不是必需的,但它对于BAD_REQUEST
情况非常有用,在这种情况下,您希望显示传入请求元素导致请求失败的内容。