繁体   English   中英

Thymeleaf 与 JSP - 返回 ModelAndView

[英]Thymeleaf with JSP - return ModelAndView

在我们的项目中,我们使用 JSP,但我们正在迁移到 Thymeleaf。

对于通过 Thymeleaf 呈现的新控制器,我们使用以下语法:

@RequestMapping(value="/thymeleaf", method= RequestMethod.GET, produces = "text/html; charset=utf-8")
@ResponseBody
public void index(HttpServletRequest request, HttpServletResponse response) throws IOException {
    TemplateEngine templateEngine = createThymeleafTemplateEngine();

    WebContext ctx = new WebContext(request, response, context);
    createModel(ctx, getBasicPageModel(request, response));

    templateEngine.process("index", ctx, response.getWriter());
}

createThymeleafTemplateEngine我们有以下代码:

private TemplateEngine createThymeleafTemplateEngine() {
    ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();

    templateResolver.setTemplateMode("LEGACYHTML5");
    templateResolver.setCharacterEncoding("UTF-8");
    templateResolver.setPrefix("/WEB-INF/thymeleaf/");
    templateResolver.setSuffix(".html");
    templateResolver.setCacheable(false);

    TemplateEngine templateEngine = new TemplateEngine();
    templateEngine.setTemplateResolver(templateResolver);

    return templateEngine;
}

所以很明显,要渲染 Thymeleaf 我们创建 templateEngine 然后使用它生成模板作为 output 来响应。

但现在我需要像这样使用它:

@RequestMapping(value="/thymeleaf2", method= RequestMethod.GET)
@ResponseBody
public ModelAndView index1(HttpServletRequest request, HttpServletResponse response) throws IOException {
    WebContext ctx = new WebContext(request, response, context);
    createModel(ctx, getBasicPageModel(request, response));

    ModelAndView mav = new ModelAndView();
    mav.setViewName("index");
    mav.addAllObjects(ctx.getVariables());

    return mav;
}

但不幸的是,这不起作用。 系统试图找到 index.jsp ,显然它失败了。 我们不能将 Thymeleaf 设置为整个项目的默认渲染器(因为 JSP 将停止工作)。 那么有什么选项可以直接从 Thymeleaf 返回 ModelAndView 吗?

看,当您使用 function createThymeleafTemplateEngine 时,您设置了前缀。 因此,模板引擎可以找到您的 thymeleaf 页面。

当您使用 thymeleaf 来完成这项工作时,您无需设置此属性。 默认情况下,框架会尝试在 src/main/resources/templates 中找到您的页面,这就是为什么找不到它的原因。

如果您使用的是 spring 引导,请添加您的 application.properties:

spring.thymeleaf.prefix:类路径:/thymeleaf/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM