Доступ к карте Thymeleaf 3 с точечной нотацией - PullRequest
0 голосов
/ 03 июля 2018

При обновлении thymeleaf с 2.x до 3.x в весенней среде 4.3.x я сталкиваюсь с проблемой, что класс org.thymeleaf.context.VariablesMap был удален. Я использую следующую структуру модели

public interface Model extends Map<String, Object>, Serializable {...}
public class BaseModel extends VariablesMap<String, Object> implements Model {...}

В VariablesMap реализован OGNL MapPropertyAccessor, который позволял обращаться к модели с точечной нотацией, независимо от того, существует ключ alternativeLanguages ​​ или нет

${meta.alternativeLanguages}

Теперь с thymeleaf 3 в Spring интеграции используется только SpringEL, а SpringEL MapAccessor выдает исключение, когда ключ alternativeLanguages ​​ не существует

Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 28): Property or field 'alternativeLanguages' cannot be found on object of type 'd.v.BaseModel' - maybe not public?

Есть ли способ избежать миграции всех шаблонов на

${meta['alternativeLanguages']}

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Это только частичный ответ, поскольку я не пробовал его, но я предполагаю, что вам придется реализовать свой org.springframework.expression.PropertyAccessor на основе (возможно, наследуя) org.springframework.context.expression.MapAccessor, который не совсем подходит то, что ты хочешь. Вы бы всегда хотели возвращать true для метода canRead и обрабатывать метод read, чтобы возвращать все, что вы хотите, чтобы он возвращал в случае, если на карте нет значения.

Тогда я предполагаю, что вам нужно каким-то образом подключиться к тому, как Thymeleaf создает свой контекст SpEL, чтобы зарегистрировать этот пользовательский PropertyAccessor, что, как я ожидаю, будет возможно, но я не видел, где при быстром просмотре.

Я надеюсь, что это направит вас в правильном направлении.

0 голосов
/ 04 июля 2018

Вы можете использовать безопасную нулевую навигацию в этом случае: ${meta?.alternativeLanguages} https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-operator-safe-navigation

...