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