Am Beispiel von YearMonth werde ich zusammenfassen, wie Sie Ihr eigenes Dienstprogramm erstellen. Stellen Sie es schließlich in "$ {# yearmonths.format (hogeYm, 'yyyy-MM')}" zur Verfügung.
Da Thymeleaf standardmäßig kein Dienstprogramm zum Betreiben der Datums- und Uhrzeit-API hat, wird YearMonth für das Beispiel verwendet. Es scheint jedoch ein offizielles Zusatzmodul zu geben (thymeleaf-extras-java8time), und es scheint besser, dieses für die Datums- und Uhrzeit-API zu verwenden. Thymeleaf- und Datums- und Zeit-API
Die Implementierung basierte auf Thymeleafs Daten.
public final class YearMonths {
public String format(final YearMonth target, final String pattern) {
if (target == null) {
return null;
}
try {
// org.thymeleaf.util.Verwenden Sie Validieren
Validate.notEmpty(pattern, "Pattern cannot be null or empty");
return target.format(DateTimeFormatter.ofPattern(pattern));
} catch (final Exception e) {
throw new TemplateProcessingException(
"Error formatting date with format pattern \"" + pattern + "\"", e);
}
}
}
Erstellen Sie einen Dialog zum Verwalten des Dienstprogramms für Datum und Uhrzeit
public class YearMonthDialect implements IExpressionObjectDialect {
//Der Name, den Sie mit Thymeleaf verwenden möchten
private static final String YEAR_MONTH_EXPRESSION_NAME = "yearmonths";
//Namensverwaltung festlegen
private static final Set<String> ALL_EXPRESSION_NAMES = new HashSet<String>(){
{add(YEAR_MONTH_EXPRESSION_NAME);}
};
@Override
public IExpressionObjectFactory getExpressionObjectFactory() {
return new IExpressionObjectFactory() {
@Override
public Set<String> getAllExpressionObjectNames() {
return ALL_EXPRESSION_NAMES;
}
@Override
public Object buildObject(IExpressionContext context, String expressionObjectName) {
//Verknüpfen Sie den Namen mit der Instanz Ihres eigenen Dienstprogramms
if(expressionObjectName.equals(YEAR_MONTH_EXPRESSION_NAME)){
return new YearMonths();
}
return null;
}
@Override
public boolean isCacheable(String expressionObjectName) {
//Bei Bedarf implementiert
return false;
}
};
}
@Override
public String getName() {
return "YearMonth";
}
}
Der Dialekt muss im DI-Container registriert sein, um in SpringBoot verfügbar zu sein. Ich werde ein Beispiel für das Erstellen und Registrieren einer dedizierten Konfiguration schreiben.
@Configuration
public class ThymeleafConfiguration {
@Bean
public DateTimeDialect DateTimeDialect() {
return new DateTimeDialect();
}
}
Sie können es wie folgt aufrufen.
${#yearmonths.format(hogeYm,'yyyy-MM')}
Recommended Posts