Рендеринг фрагмента HTML в Thymeleaf с внешнего сервера - PullRequest
1 голос
/ 29 апреля 2019

У меня есть домашняя страница в моем весеннем загрузочном проекте под названием home.html. У меня есть контроллер страниц для визуализации этого home.html. Ниже приведен код контроллера.

@RequestMapping(value = "/home")
public String goToHome(Model model) {
    return "home";
}

В моем проекте home.html находится внутри папки webapp/WEB-INF/static/. поэтому путь webapp/WEB-INF/static/home.html

Мой home.html выглядит ниже

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/html">
<head>
     <title>home</title>
</head>
<body>
    <object th:include="/en/home :: home-body" th:remove="tag"/>
</body>
</html>

У меня есть файл home.html на внешнем сервере следующим образом.

<div th:fragment="home-body">
    <p>Welcome to home page</p>
</div>

Путь к этому файлу http://external-server.com/fragments/en/home.html

То, что я хочу сделать, - сделать так, чтобы эта home-body фрагментная часть извлекалась с этого внешнего сервера внутри сервера home.html, находящегося в весенней загрузке.

Я добавил приведенный ниже компонент в качестве конфигурации для извлечения этого home-body фрагмента. Ниже приведен код для этого.

@Bean
    public UrlTemplateResolver urlTemplateResolver(){
        UrlTemplateResolver urlTemplateResolver = new UrlTemplateResolver();
        boolean isCmsContentEnable = Boolean.parseBoolean( env.getProperty( ConfigurationConstants.CMS_CONTENT_ENABLE ) );
        if( isCmsContentEnable )
        {
            urlTemplateResolver.setPrefix( "http://external-server.com/fragments/" );
            urlTemplateResolver.setSuffix( ".html" );
            urlTemplateResolver.setCharacterEncoding( "UTF-8" );
            urlTemplateResolver.setTemplateMode( "HTML5" );
            urlTemplateResolver.setCacheable( false );
            urlTemplateResolver.setOrder(10);
        }
        return urlTemplateResolver;
    }

Теперь, когда я пытаюсь перейти на домашнюю страницу, вместо рендеринга фрагмента * 1030 внутри home.html, находящегося на сервере tomcat с весенней загрузкой, происходит непосредственное рендеринг home.html, находящегося на внешнем сервере.

Как я могу исправить эту проблему? Может кто-нибудь указать, что я здесь делаю неправильно. Спасибо

1 Ответ

0 голосов
/ 29 апреля 2019

Создать SpringTemplateEngine с thymeleafTemplateResolver и urlTemplateResolver как templateResolvers.

   @Bean public ThymeleafViewResolver thymeleafViewResolver()
{
    ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
    viewResolver.setTemplateEngine( templateEngine() );
    return viewResolver;
}

@Bean public SpringTemplateEngine templateEngine()
{
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    Set<ITemplateResolver> templateResolvers = new HashSet();
    templateResolvers.add( thymeleafTemplateResolver() );
    templateResolvers.add( urlTemplateResolver() );
    templateEngine.setTemplateResolvers( templateResolvers );

    return templateEngine;
}

@Bean public SpringResourceTemplateResolver thymeleafTemplateResolver()
{
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
    templateResolver.setPrefix( "/WEB-INF/static/" );
    templateResolver.setSuffix( ".html" );
    templateResolver.setTemplateMode( "HTML5" );
    templateResolver.setOrder( 2 );
    return templateResolver;
}

@Bean public UrlTemplateResolver urlTemplateResolver()
{
    UrlTemplateResolver urlTemplateResolver = new UrlTemplateResolver();
    urlTemplateResolver.setCharacterEncoding( "UTF-8" );
    urlTemplateResolver.setTemplateMode( "HTML5" );
    urlTemplateResolver.setCacheable( false );
    urlTemplateResolver.setOrder( 3 );
    return urlTemplateResolver;
}

Затем получите доступ к внешнему шаблону следующим образом.

 <div th:include="http://banner.server.com/myBanner.html :: fragmentName">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...