En utilisant YearMonth comme exemple, je vais résumer comment créer votre propre utilitaire.
Enfin, rendez-le disponible dans $ {# yearmonths.format (hogeYm, 'yyyy-MM')}
.
Étant donné que Thymeleaf n'a pas d'utilitaire pour faire fonctionner l'API de date et d'heure par défaut, YearMonth est utilisé pour l'exemple. Cependant, il semble y avoir un module supplémentaire officiel (thymeleaf-extras-java8time), et il semble préférable de l'utiliser pour l'API de date et d'heure. Thymeleaf et API de date et d'heure
L'implémentation était basée sur les dates de Thymeleaf.
public final class YearMonths {
public String format(final YearMonth target, final String pattern) {
if (target == null) {
return null;
}
try {
// org.thymeleaf.util.Utiliser Valider
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);
}
}
}
Créer une boîte de dialogue pour gérer l'utilitaire de date et d'heure
public class YearMonthDialect implements IExpressionObjectDialect {
//Le nom que vous souhaitez utiliser avec Thymeleaf
private static final String YEAR_MONTH_EXPRESSION_NAME = "yearmonths";
//Ensemble de gestion de nom
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) {
//Associez le nom à l'instance de votre propre utilitaire
if(expressionObjectName.equals(YEAR_MONTH_EXPRESSION_NAME)){
return new YearMonths();
}
return null;
}
@Override
public boolean isCacheable(String expressionObjectName) {
//Mis en œuvre au besoin
return false;
}
};
}
@Override
public String getName() {
return "YearMonth";
}
}
Dialect doit être enregistré dans le conteneur DI pour être disponible dans SpringBoot. J'écrirai un exemple de création et d'enregistrement d'une configuration dédiée.
@Configuration
public class ThymeleafConfiguration {
@Bean
public DateTimeDialect DateTimeDialect() {
return new DateTimeDialect();
}
}
Vous pourrez l'appeler comme suit.
${#yearmonths.format(hogeYm,'yyyy-MM')}
Recommended Posts