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

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

是否可以在控制器映射方法中将视图呈现为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有哪些优点和应用?

使用任务重复操作

googletest:如何设置?

kjdkj4d5程序员
这就是我所做的,你可以根据需要进行调整。我在我的Linux机器上下载了gtest-1.6.0.zip(从发布页面)到〜/下载完全输入的是/ home / me / Downloads / 将gtest-1.6.0.zip的内容解压缩到〜/ Downloads / gtest-1...... 展开详请

如何为图像区域映射添加悬停效果

kjdkj4d5程序员
您需要将以下代码移出正文标记 <style type="text/css"> #area1, #area2, #area3, #area4 { opacity: 0.8; transition: all .3s; } </style> 我建议你将class的值...... 展开详请

在卸载之前保存到IndexedDB

kjdkj4d5程序员

首先可能会在页面中出现类似保存按钮的内容。

然后,当用户关闭页面时,您可以在不保存的情况下显示关闭页面的确认请求对话框。您可以利用这段时间来保存数据,或者由于通知用户保存数据,用户可以手动按保存按钮进行保存。

扫码关注云+社区