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.
Es gibt zwei Methoden, daher werde ich sie vorstellen.
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.
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 ...
__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