如何为多品牌网站编写自定义解析器?

时间:2019-02-16 17:00:00

标签: thymeleaf

我遇到一种情况,需要根据是否存在品牌专用文件有条件地解决th:replace

当前代码很简单:

<!--/* brand.menuLogo has been pre-resolved to point to some specific file */-->
<div th:replace="${brand.menuLogo}"></div>

但是,由于多种原因,这并不令人满意,并且很难维护。

我希望能够改为执行此操作:

<!--/* brand.id has some value like 'X' for Brand X */-->
<div th:replace="somefile_${brand.id}"></div>

这样的想法是,如果存在somefile_X.html,将使用它,否则将使用somefile.html

在Thymeleaf中,最干净,最简单,最易读和最可维护的方法是什么?我对任何可以“ Thymeleaf方式”工作的解决方案都持开放态度。我在问题中使用“自定义解析器”一词作为其可能如何工作的先入为主的概念,但我不相信这种概念。

澄清

该网站有数百个文件,并非每个文件都有每个品牌的变体。我对一种可以基于命名约定和文件存在的组合来解析正确文件的机制感兴趣。因此,如果FILE_X存在,则选择它,否则选择FILE。

1 个答案:

答案 0 :(得分:0)

您可以尝试在th:replace值中尝试三元表达式,如下所示:

<div th:replace="${brand.id} ? 'somefile' + __${brand.id}__ + '.html' : 'somefile.html'">

请注意,__${brand.id}__由百里香叶引擎进行了预处理,如本documentation所述。