[英]Accessing thymeleaf fragments from controller
嗨,我是百里香的新手。 当我尝试从控制器访问百里香片段时,它说该片段或模板不存在。以下是用于访问片段的控制器代码。
@RequestMapping(value="/firstpage")
public String firstPage(){
return "mainpage::firstpage";
}
public class ThymeleafLayoutInterceptor extends HandlerInterceptorAdapter {
private static final String LayoutFile = "mainHTML/layoutFile";
private static final String ReturnedHtmlFile = "returnedHTML";
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (modelAndView == null || !modelAndView.hasView()) {
return;
}
String originalViewName = modelAndView.getViewName();
if (originalViewName.startsWith("redirect:") || originalViewName.startsWith("forward:")) {
return;
}
modelAndView.setViewName(LayoutFile);
modelAndView.addObject(ReturnedHtmlFile,originalViewName);
}
}
@Configuration
@EnableWebMvc
@ComponentScan("com.example")
public class BeanConfig {
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/");
resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
return engine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
return resolver;
}
}
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<body>
<div th:include="${returnedHTML}" class="contents"></div>
</body>
</html>
<html>
<body>
<div th:fragment="firstpage">
Hi...This is my first page
</div>
</body>
</html>
当我在控制器中以“ mainpage”的形式返回字符串时,将显示主页的所有内容。但是,如果我们尝试以片段形式访问,则会返回上述错误消息。有人可以在这里解决我的问题吗?
我相信你做对了所有事情。
我认为问题是org.thymeleaf.standard.processor.attr.StandardIncludeFragmentAttrProcessor(实际上是org.thymeleaf.standard.processor.attr.AbstractStandardFragmentHandlingAttrProcessor)试图在评估表达式$ {returnedHTML}之前解析该片段的方式。 并且由于字符串“ $ {returnedHTML}”尚不包含该片段,因此该模板将无法正确处理。
参见org.thymeleaf.standard.processor.attr.AbstractStandardFragmentHandlingAttrProcessor.computeFragment(Arguments,Element,String,String):列表
当您不在交换器中交换变量并从控制器返回一个片段时,它将像超级按钮一样工作。 我假设您实现了一种自定义布局技术,类似于此处所述: http : //blog.codeleak.pl/2013/11/thymeleaf-template-layouts-in-spring.html 。 我对么?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.