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