Пользовательский диалект Thymeleaf не работает - PullRequest
0 голосов
/ 27 апреля 2018

Мой пользовательский диалект с процессором не разбирает значения, и я не знаю почему. В сгенерированном представлении нет ничего, где должен быть $ {content}, и после изменения тега на th: text он появляется. Я использую Spring Boot v1.5.9.RELEASE, Spring v4.3.13.RELEASE

зависимости pom.xml (это подмодуль)

<properties>
    <h2.version>1.4.194</h2.version>
    <java-version>1.8</java-version>
    <org.thymeleaf-version>3.0.9.RELEASE</org.thymeleaf-version>
    <org.thymeleaf.extras-version>3.0.0.RELEASE</org.thymeleaf.extras-version>
    <thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf</artifactId>
        <version>${org.thymeleaf-version}</version>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring4</artifactId>
        <version>${org.thymeleaf-version}</version>
    </dependency>
    <dependency>
        <groupId>nz.net.ultraq.thymeleaf</groupId>
        <artifactId>thymeleaf-layout-dialect</artifactId>
        <version>${thymeleaf-layout-dialect.version}</version>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-java8time</artifactId>
        <version>${org.thymeleaf.extras-version}</version>
    </dependency>
    <!--WebJars-->
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.3.7</version>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>jquery</artifactId>
        <version>3.2.0</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
    </dependency>
    <!--database-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>test</scope>
        <version>${h2.version}</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-java8</artifactId>
        <version>${hibernate.version}</version>
    </dependency>
</dependencies>

LineSeparatorProcessor.java

public class LineSeparatorProcessor extends AbstractAttributeTagProcessor {

    private static final String ATTR_NAME = "lstext";
    private static final int PRECEDENCE = 10000;


    public LineSeparatorProcessor(final String dialectPrefix) {
        super(
                TemplateMode.HTML,
                dialectPrefix,
                null,
                false,
                ATTR_NAME,
                true,
                PRECEDENCE,
                true);
    }


    protected void doProcess(
            final ITemplateContext context, final IProcessableElementTag tag,
            final AttributeName attributeName, final String attributeValue,
            final IElementTagStructureHandler structureHandler) {

        final IEngineConfiguration configuration = context.getConfiguration();

        final IStandardExpressionParser parser =
                StandardExpressions.getExpressionParser(configuration);

        final IStandardExpression expression = parser.parseExpression(context, attributeValue);

        final String value = (String) expression.execute(context);

         structureHandler.setBody(
                HtmlEscape.escapeHtml5Xml(value).replace(System.getProperty("line.separator"), "<br />"),
                false);

    }
}

MyDialect.java

public class MyDialect extends AbstractProcessorDialect {

    public MyDialect() {
        super(
                "MyDialect",
                "mydialect",
                13000);
    }

    public Set<IProcessor> getProcessors(final String dialectPrefix){
        final Set<IProcessor> processors = new HashSet<>();
        processors.add( new LineSeparatorProcessor(dialectPrefix) );
        return processors;
    }

}

ThymeleafConfiguration.java

@Configuration
public class ThymleafConfiguration {

    @Bean
    public MyDialect myDialect() {
        return new MyDialect();
    }
}

view.html

        <span mydialect:lstext="${content}" ></span>

1 Ответ

0 голосов
/ 27 апреля 2018

Вам необходимо добавить диалект к экземпляру TemplateEngine. Например:

@Bean
public SpringTemplateEngine templateEngine(){
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.setEnableSpringELCompiler(true);
    templateEngine.setTemplateResolver(templateResolver());
    templateEngine.addDialect(new MyDialect());
    return templateEngine;
}

Вы можете найти это в Скажи привет! Расширение Thymeleaf за 5 минут guide.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...