如何将SpringMVC视图手动呈现为html?

  • 回答 (3)
  • 关注 (0)
  • 查看 (107)

是否可以在控制器映射方法中将视图呈现为html,以便将呈现的html作为json对象的一部分返回?

常用的控制器方法示例:

@RequestMapping(value={"/accounts/{accountId}"}, method=RequestMethod.GET)
public String viewAcc(final HttpServletRequest req, 
        final HttpServletResponse resp, final Model model,
        @PathVariable("accountId") final String docId) {

    // do usual processing ...

    // return only a STRING value, 
    //   which will be used by spring MVC to resolve into myview.jsp or myview.ftl
    //   and populate the model to the template to result in html
    return "myview";
}

我所期望的是:

@RequestMapping(value={"/accounts/{accountId}"}, method=RequestMethod.GET)
public String viewAcc(final HttpServletRequest req, 
        final HttpServletResponse resp, final Model model,
        @PathVariable("accountId") final String docId) {

    // do usual processing ...

    // manually create the view
    ModelAndView view = ... ? (how)

    // translate the view to the html
    //   and get the rendered html from the view
    String renderedHtml = view.render .. ? (how)

    // create a json containing the html
    String jsonString = "{ 'html' : " + escapeForJson(renderedHtml) + "}"

    try {
        out = response.getWriter();
        out.write(jsonString);
    } catch (IOException e) {
        // handle the exception somehow
    }

    return null;
}

我想知道在控制器方法中创建视图并将视图手动呈现为html的正确方法是什么。

以下是从公认答案的指导中得到的工作示例:

View resolvedView = thiz.viewResolver.resolveViewName("myViewName", Locale.US);
MockHttpServletResponse mockResp = new MockHttpServletResponse();
resolvedView.render(model.asMap(), req, mockResp);
System.out.println("rendered html : " + mockResp.getContentAsString());
Mr.CryptoMr.Crypto提问于
kjdkj4d5程序员回答于

可以使用模板库创建html,速度例如。然后,需要将返回类型定义为

public @ResponseBody SomeObject viewAcc(...) {...}

对象本身可以获得html以及其他一些变量。

回答过的其他问题

腾讯云在世界杯直播中采用了哪些黑科技?

kjdkj4d5程序员
智能视频分类编码技术 通过对比海量视频分辨率与码率的曲线关系,结合其视频类型及视频标签,对视频进行分类编解码,在保证用户达到最优观看效果的同时,持续优化传输带宽,为客户方及用户节省相关成本。   在同分辨率的情况下,不同类型的视频需要的真实带宽并不相同。例如为达到1...... 展开详请

腾讯云TStack上的云Oracle有哪些优点和应用?

html td问题:如果另一个值为'not available',则隐藏td值

kjdkj4d5程序员

添加ng-hide="row.pdf_availability == 'PDF Not Available'"工作正常..

急切评估列表理解中的lambda

kjdkj4d5程序员
您正在定义函数,但不对其应用任何参数: 试试这个 x1 = [(lambda x: x.split(' '))(x) for x in tt] 但如果函数完全复杂,那么最好只在理解之外提取函数定义,然后使用map或list comprehension。... 展开详请

左移导致节点javascript中的负数

kjdkj4d5程序员
所以事实证明这是根据规范。位移运算符返回带符号的32位整数结果。 结果是带符号的32位整数。 来自最新的ECMAScript规范。 因为你的数字已经是8位长,所以将它向左移24位然后将其解释为有符号整数意味着前导1位被视为使其成为负数。... 展开详请

如果在Laravel foreach中提交后有清单,如何显示清单?

kjdkj4d5程序员
我找到了答案,创建了一些像这样的函数: <?php function checkCX($id){ foreach(\Request::input("cx") as $input){ if($input == $id){ return true; }...... 展开详请

扫码关注云+社区