0

我想知道是否可以通过编程方式而不是通过控制器的返回参数生成 ModelAndView 的输出。例如:我有以下方法返回已编译的 html:

@RequestMapping(value = "/get-list", method = RequestMethod.GET, headers = BaseController.AJAX_HEADER)
public ModelAndView getList(@RequestParam(value = "page", required = true) Integer page,
            @ActiveUser User activeUser) {
        ModelAndView result = null;

        try {
            result = new ModelAndView("administration/events-log/list");
            result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE));
        }
        catch (Exception e) {
            log(e, activeUser.getUsername());
        }

        return result;
    }

我想要的是创建这样的东西:

@RequestMapping(value = "/get-list", method = RequestMethod.GET, headers = BaseController.AJAX_HEADER)
public @ResponseBody HashMap<String, Object> getList(@RequestParam(value = "page", required = true) Integer page,
            @ActiveUser User activeUser) {
        HashMap<String, Object> json = new HashMap<String, Object>();

        try {
            json.put("error", 0);
            ModelAndView result = new ModelAndView("administration/events-log/list");
            result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE));

            json.put("content", result);

        }
        catch (Exception e) {
            /**/
        }

        return json;
    }

所以将被发送回客户端的 JSON 对象看起来是:{'error': 0, 'content':compiled_html}

有什么想法吗?谢谢

4

1 回答 1

1

ModelAndView没有输出。它只知道视图的名称。视图的渲染独立于 Spring MVC。

如果您只是想发送JSON包含一些内容的内容,HTML您可以将JSON代码直接放在您的 jsp 上。像这样更改您的Java代码:

result = new ModelAndView("path/to/json");
result.addObject("events", eventsLogService.getList(page, Config.RECORDS_PER_PAGE));
result.addObject("html", "administration/events-log/list");

您的JSONjsp 可能如下所示:

<%@ page contentType="application/json" %>
{
  "error": "0",
  "content": "<jsp:include page="${html}" />"
}

请注意,此代码仅用于说明。您可能已经根据您的情况对其进行了调整。而且您必须逃避包含HTML才能获得有效的JSON.

于 2013-05-02T10:47:17.470 回答