[JAVA] Thymeleaf konvertiert den Zeilenvorschubcode in ein HTML-Zeilenvorschub-Tag und gibt ihn aus.

Selbst wenn Thymeleaf eine Zeichenfolge mit Zeilenumbrüchen mit th: text usw. ausgibt, werden die Zeilenumbrüche nicht auf dem Bildschirm angezeigt. Sie müssen den Zeilenvorschubcode in ein \
-Tag konvertieren.

Umgebung

Punkt

Implementierung

Es gibt zwei Methoden, daher werde ich sie vorstellen.

① In Ansicht implementiert

Verwenden Sie nur die vorhandene Thymeleaf-Syntax. Sie müssen es nicht im Voraus einstellen, damit Sie es problemlos verwenden können.

<th:block th:if="${sentence}">
    <th:block th:each="str, stat : ${sentence.split('\r\n|\r|\n', -1)}">
        <th:block th:text="${str}"/>
        <br th:if="${!stat.last}"/>
    </th:block>
</th:block>

Teilen Sie das Zeichen, das Sie ausgeben möchten, durch den Zeilenvorschubcode und wiederholen Sie die Schleife mit th: each. Der Inhalt wird als th: text ausgegeben und \
zwischen ihnen eingefügt.

② Definieren Sie Ihre eigenen direkten

Die obige Implementierung ist einfach, wird jedoch kompliziert, wenn sie an mehreren Stellen verwendet wird. Erstellen Sie daher Ihr eigenes Direct, damit Sie in View darauf verweisen können.

__Konvertierungsverarbeitung und Textausgabeprozessor __

TextLineProcessor.java


import org.thymeleaf.Arguments;
import org.thymeleaf.Configuration;
import org.thymeleaf.dom.Element;
import org.thymeleaf.processor.attr.AbstractUnescapedTextChildModifierAttrProcessor;
import org.thymeleaf.standard.expression.IStandardExpression;
import org.thymeleaf.standard.expression.IStandardExpressionParser;
import org.thymeleaf.standard.expression.StandardExpressionExecutionContext;
import org.thymeleaf.standard.expression.StandardExpressions;
import org.unbescape.html.HtmlEscape;


/**
 *Prozessor, der den Zeilenvorschubcode in das br-Tag konvertiert
 */
public class TextLineProcessor extends AbstractUnescapedTextChildModifierAttrProcessor {

    public static final int ATTR_PRECEDENCE = 1450;
    public static final String ATTR_NAME = "textbr";


    protected TextLineProcessor() {
        super(ATTR_NAME);
    }


    @Override
    public int getPrecedence() {
        return ATTR_PRECEDENCE;
    }


    /**
     *Gibt die Ausgabezeichenfolge zurück
     *
     * @param arguments
     * @param element
     * @param attributeName
     * @return
     */
    @Override
    protected final String getText(
            final Arguments arguments, final Element element, final String attributeName) {

        String text = getAttributeObjectString(arguments, element, attributeName);

        //HTML-Escape-Verarbeitung
        text = HtmlEscape.escapeHtml4Xml(text);

        //Ersetzen Sie den Zeilenvorschubcode durch das br-Tag
        return text.replaceAll("\r\n|\r|\n", "<br/>");
    }


    /**
     *Ruft die im Attribut angegebene Variable als Zeichenfolge ab
     *
     * @param arguments
     * @param element
     * @param attributeName
     * @return
     */
    protected String getAttributeObjectString(
            final Arguments arguments, final Element element, final String attributeName) {

        final String attributeValue = element.getAttributeValue(attributeName);

        final Configuration configuration = arguments.getConfiguration();
        final IStandardExpressionParser expressionParser = StandardExpressions.getExpressionParser(configuration);

        final IStandardExpression expression = expressionParser.parseExpression(configuration, arguments, attributeValue);

        final Object result =
                expression.execute(configuration, arguments, StandardExpressionExecutionContext.UNESCAPED_EXPRESSION);

        return (result == null ? "" : result.toString());

    }
}

Implementiert mit Bezug auf die Verarbeitung von th: text und th: utext. Um den Prozess kurz zu erklären ...

  1. Escape-Verarbeitung des HTML-Tags
  2. Ersetzen Sie den Zeilenvorschubcode durch das Tag \
  3. Bildschirmausgabe ohne zu entkommen

__Dialect Registrierung __ Registrieren Sie den erstellten Prozessor direkt.

CustomDialect.java


import org.thymeleaf.dialect.AbstractDialect;
import org.thymeleaf.processor.IProcessor;

import java.util.HashSet;
import java.util.Set;


/**
 *Registrieren Sie Ihre eigenen direkt definiert
 */
public class CustomDialect extends AbstractDialect{

    static final String DIALECT_PREFIX = "ex";

    @Override
    public String getPrefix() {
        return DIALECT_PREFIX;
    }


    @Override
    public Set<IProcessor> getProcessors() {
        final Set<IProcessor> processors = new HashSet<IProcessor>();
        processors.add(new TextLineProcessor());
        return processors;
    }
}

__Thymeleaf Einstellungen __

ThymeleafConfiguration.java


import com.ushidatmhr.thymeleaf.CustomDialect;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ThymeleafConfiguration {

    @Bean
    CustomDialect myDialect() {
        return new CustomDialect();
    }

}

__ Wie benutzt man __

<p ex:textbr="${sentence}" />

Recommended Posts

Thymeleaf konvertiert den Zeilenvorschubcode in ein HTML-Zeilenvorschub-Tag und gibt ihn aus.
Erstellen Sie mit Thymeleaf3 Ihren eigenen Code zum direkten Konvertieren von Zeilenvorschubcode in Zeilenvorschub-Tag
So legen Sie mit JAXB Zeichencode und Zeilenvorschubcode fest
So legen Sie den Zeichencode und den Zeilenvorschubcode in Eclipse fest
Konvertieren Sie Markdown mit flexmark-java in HTML
Konvertieren Sie mit Ruby von JSON nach TSV und von TSV nach JSON
Einbetten von JavaScript-Variablen in HTML mit Thymeleaf
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
Bis INSERT und SELECT für Postgres mit Spring Boot und Thymianblatt
Beispielcode zum Parsen von Datum und Uhrzeit mit Java SimpleDateFormat
Konvertieren Sie Excel mit Java in Blob, speichern Sie es, lesen Sie es aus der Datenbank und geben Sie es als Datei aus!
Thymeleaf machte HTML zu einem gemeinsamen Bestandteil, um das Design zu vereinheitlichen und die Entwicklungseffizienz zu verbessern.
Sammeln Sie Zeilenvorschubcodes mit Aufzählung
So konvertieren Sie LocalDate und Timestamp
PDF und TIFF mit Java 8 ausgeben
[Android] Konvertieren Sie Android Java-Code in Kotlin
[Java: Memorandum] Bis der Zeilenvorschubcode CRLF in LF geändert wird