猿问

带有点符号的Thymeleaf 3地图访问

在春季4.3.x环境中将thymeleaf从2.x更新到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,该OGNL MapPropertyAccessor都可以使用点符号来访问模型。

${meta.alternativeLanguages}

现在使用thymeleaf 3,spring集成仅使用SpringEL,并且当key AlternativeLanguages不存在时,SpringEL MapAccessor会引发异常

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']}


天涯尽头无女友
浏览 159回答 2
2回答

料青山看我应如是

这只是部分答案,因为我还没有尝试过,但是我猜您将不得不org.springframework.expression.PropertyAccessor基于(可能继承自)您自己的方法来实现自己的问题,而org.springframework.context.expression.MapAccessor这并不能完全满足您的要求。您希望几乎总是为该canRead方法返回true&nbsp;,并处理该read方法以返回您希望它返回的值(如果地图中没有值)。然后,我认为您需要以某种方式了解Thymeleaf如何创建其SpEL上下文来注册该自定义PropertyAccessor,我希望这是可能的,但是我没有快速浏览一下。不过,我希望这能使您指向正确的方向。
随时随地看视频慕课网APP

相关分类

Java
我要回答