通常,如果我必须动态添加一些 html 代码,我想使用 JQuery 从 View 加载,然后使用 @ResponseBody 从 Controller 渲染 ModelAndView,因为我相信从 Javascript 添加静态 html 是不可读的并且不可重复使用。 现在我有一个情况,进行 Ajax 调用时,我需要检查 Controller 中的一些值,然后渲染回带有一些值的 map ,或者渲染要添加到 DOM 中的 html 代码。所以我一直在思考 ModelAndView 是如何工作的,以及如何添加要在 viewManagement 上处理的 View ,但只有在我决定附加该数据时才进行渲染。 所以想象一下我想要一张具有这些值的 map
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")
然后在 View 中
success:function(data)
if(data.status=="2") $("#rowErrorsTable tbody tr:last").after(data.rowErros);
问候。
最佳答案
我不同意在客户端代码中包含标记本身可读性或可重用性较差,但无论如何,我不确定为什么您会选择在这个用例中使用 ModelAndView。您可以使用成功和错误回调在前端完成此操作,并从 Controller 方法返回适当的 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
标记相关的带宽; - 使用 HTTP 状态代码作为对 HTTP 请求的适当响应,从而清理并标准化您的 API
如果您需要在错误负载中添加其他信息,请考虑使用 JSON 对象,该对象除了 HTTP 状态代码本身提供的信息之外还向前端提供有关错误的信息。在许多情况下这并不是必需的,但对于您希望显示导致请求失败的传入请求元素的 BAD_REQUEST
情况,它可能很有用。
关于java - 将 html 代码作为属性添加到 ModelAndView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724643/