[JAVA] Convertissez le code de saut de ligne en une balise de saut de ligne html avec Thymeleaf et sortie

Même si Thymeleaf génère une chaîne de caractères comprenant des sauts de ligne avec th: text etc., les sauts de ligne ne sont pas reflétés à l'écran. Vous devez convertir le code de saut de ligne en une balise \
.

environnement

point

la mise en oeuvre

Il existe deux méthodes, je vais donc les présenter.

① Implémenté sur View

Utilisez uniquement la syntaxe Thymeleaf existante. Pas besoin de régler à l'avance, vous pouvez donc l'utiliser facilement.

<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>

Divisez le caractère que vous voulez sortir par le code de saut de ligne et bouclez avec th: each. Le contenu est affiché sous la forme th: text, et \
est inséré entre eux.

② Définissez votre propre

La mise en œuvre ci-dessus est facile, mais elle devient compliquée lorsqu'elle est utilisée à plusieurs endroits. Par conséquent, créez votre propre direct afin de pouvoir vous y référer à partir de View.

__ Traitement de conversion et processeur de sortie de texte __

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;


/**
 *Processeur qui convertit le code de saut de ligne en balise br
 */
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;
    }


    /**
     *Renvoie la chaîne de sortie
     *
     * @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);

        //traitement d'échappement html
        text = HtmlEscape.escapeHtml4Xml(text);

        //Remplacer le code de saut de ligne par la balise br
        return text.replaceAll("\r\n|\r|\n", "<br/>");
    }


    /**
     *Récupère la variable spécifiée dans l'attribut sous forme de chaîne de caractères
     *
     * @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());

    }
}

Implémenté en référence au traitement de th: text et th: utext. Pour expliquer brièvement le processus ...

  1. Traitement d'échappement de la balise html
  2. Remplacez le code de saut de ligne par la balise \
  3. Sortie d'écran sans y échapper

__Dialect enregistrement __ Enregistrez le processeur créé dans le direct.

CustomDialect.java


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

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


/**
 *Enregistrez votre propre définition directe
 */
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;
    }
}

__ Paramètres de Thymeleaf __

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();
    }

}

__ Comment utiliser __

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

Recommended Posts

Convertissez le code de saut de ligne en une balise de saut de ligne html avec Thymeleaf et sortie
Créez votre propre code de saut de ligne directement pour convertir en balise de saut de ligne avec Thymeleaf3
Comment spécifier le code de caractère et le code de saut de ligne avec JAXB
Comment définir le code de caractère et le code de saut de ligne dans Eclipse
Convertissez Markdown en HTML avec flexmark-java
Conversion de JSON en TSV et TSV en JSON avec Ruby
Comment intégrer des variables JavaScript dans HTML avec Thymeleaf
J'ai essayé de lire et de sortir CSV avec Outsystems
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Exemple de code pour analyser la date et l'heure avec SimpleDateFormat de Java
Convertissez Excel en Blob avec java, enregistrez-le, lisez-le à partir de DB et exportez-le sous forme de fichier!
Thymeleaf a fait du HTML une partie commune pour unifier la conception et améliorer l'efficacité du développement.
Collectez les codes de saut de ligne avec enum
Comment convertir LocalDate et Timestamp
Sortie PDF et TIFF avec Java 8
[Android] Convertir le code Java Android en Kotlin
[Java: Memorandum] Jusqu'à ce que le code de saut de ligne CRLF soit changé en LF