【问题标题】:Add html code into ModelAndView as attribute将 html 代码作为属性添加到 ModelAndView
【发布时间】:2014-07-13 16:09:53
【问题描述】:

通常,如果我必须动态添加一些 html 代码,我想使用 JQuery 从视图加载,然后使用 @ResponseBody 从控制器渲染 ModelAndView,因为我认为从 Javascript 添加静态 html 是不可读的并且不可重复使用。 现在我有一个案例,在进行 Ajax 调用时,我需要检查控制器中的一些值,然后用一些值渲染回地图,或者渲染要添加到 DOM 中的 html 代码。所以我一直在思考 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);

问候。

【问题讨论】:

    标签: java javascript jquery spring


    【解决方案1】:

    我不同意在客户端代码中包含标记本身的可读性或可重用性较低,但无论如何,我不确定您为什么会选择在此用例中使用 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
    

    假设您的错误案例远没有成功案例那么频繁,那么您也:

    1. 为您的用户节省与传输error.jsp 标记与每个有效负载相关的带宽;
    2. 使用 HTTP 状态代码作为对 HTTP 请求的适当响应,从而清理和规范化您的 API

    如果您需要错误负载中的其他信息,请考虑一个 JSON 对象,该对象在 HTTP 状态代码本身提供的信息之外提供有关错误的前端信息。在许多情况下这不是必需的,但它对于 BAD_REQUEST 您希望显示导致请求失败的传入请求元素的情况很有用。

    【讨论】:

    • 不,不,你不明白。我不是在所有情况下都发送 html 代码。仅当出现错误时,在一种情况下,我必须发回要添加到错误表中的行列表。确切地说,我不想重定向,因为当我试图保存信息时,当我知道无法插入多少行时,然后将它们发送回视图以添加到 DOM 中。如果我必须重定向以再次检查这些错误行将再次重复该操作,所以我认为这将非常低效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多