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 \ 
.
Il existe deux méthodes, je vais donc les présenter.
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.
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 ...
__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