[英]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.