Skip to content

Commit 7327e09

Browse files
author
Developer
committed
fix: resolve issue #47 - Thymeleaf 3.1.4+ bean reference restriction
- Add cssColors model attribute to UiController with pre-computed RGB values - Update variables.css template to use cssColors instead of @cssColorUtils bean reference - Add SpringStandardDialect bean configuration for compatibility This fixes the TemplateProcessingException caused by Thymeleaf 3.1.4.RELEASE which forbids bean references (@cssColorUtils) in CSS templates.
1 parent 6924ffd commit 7327e09

3 files changed

Lines changed: 42 additions & 13 deletions

File tree

spring-boot-admin-server-ui/src/main/frontend/public/variables.css

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
:root {
2-
--main-50: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade50())})]*/ #e8fbef;
3-
--main-100: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade100())})]*/ #d0f7df;
4-
--main-200: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade200())})]*/ #a1efbd;
5-
--main-300: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade300())})]*/ #71e69c;
6-
--main-400: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade400())})]*/ #41de7b;
7-
--main-500: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade500())})]*/ #22c55e;
8-
--main-600: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade600())})]*/ #1a9547;
9-
--main-700: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade700())})]*/ #116530;
10-
--main-800: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade800())})]*/ #09351a;
11-
--main-900: /*[(${@cssColorUtils.hexToRgb(uiSettings.theme.palette.getShade900())})]*/ #010603;
2+
--main-50: /*[(${cssColors.shade50Rgb})]*/ #e8fbef;
3+
--main-100: /*[(${cssColors.shade100Rgb})]*/ #d0f7df;
4+
--main-200: /*[(${cssColors.shade200Rgb})]*/ #a1efbd;
5+
--main-300: /*[(${cssColors.shade300Rgb})]*/ #71e69c;
6+
--main-400: /*[(${cssColors.shade400Rgb})]*/ #41de7b;
7+
--main-500: /*[(${cssColors.shade500Rgb})]*/ #22c55e;
8+
--main-600: /*[(${cssColors.shade600Rgb})]*/ #1a9547;
9+
--main-700: /*[(${cssColors.shade700Rgb})]*/ #116530;
10+
--main-800: /*[(${cssColors.shade800Rgb})]*/ #09351a;
11+
--main-900: /*[(${cssColors.shade900Rgb})]*/ #010603;
1212

13-
--bg-color-start: /*[(${uiSettings.theme.palette.getShade300()})]*/ #71e69c;
14-
--bg-color-stop: /*[(${uiSettings.theme.palette.getShade700()})]*/ #09351a;
13+
--bg-color-start: /*[(${uiSettings.theme.palette.shade300})]*/ #71e69c;
14+
--bg-color-stop: /*[(${uiSettings.theme.palette.shade700})]*/ #09351a;
1515
}
1616

1717
.bg-color-start {

spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/config/AdminServerUiAutoConfiguration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.springframework.http.MediaType;
3939
import org.springframework.web.reactive.config.WebFluxConfigurer;
4040
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
41+
import org.thymeleaf.spring6.dialect.SpringStandardDialect;
4142
import org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver;
4243
import org.thymeleaf.templatemode.TemplateMode;
4344

@@ -95,6 +96,13 @@ public CssColorUtils cssColorUtils() {
9596
return new CssColorUtils();
9697
}
9798

99+
@Bean
100+
public SpringStandardDialect springStandardDialect() {
101+
SpringStandardDialect dialect = new SpringStandardDialect();
102+
dialect.setEnableSpringELCompiler(true);
103+
return dialect;
104+
}
105+
98106
@Bean
99107
@ConditionalOnMissingBean
100108
public UiController homeUiController(UiExtensions uiExtensions) throws IOException {

spring-boot-admin-server-ui/src/main/java/de/codecentric/boot/admin/server/ui/web/UiController.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import de.codecentric.boot.admin.server.ui.config.AdminServerUiProperties.PollTimer;
3535
import de.codecentric.boot.admin.server.ui.config.AdminServerUiProperties.UiTheme;
36+
import de.codecentric.boot.admin.server.ui.config.CssColorUtils;
3637
import de.codecentric.boot.admin.server.ui.extensions.UiExtension;
3738
import de.codecentric.boot.admin.server.ui.extensions.UiExtensions;
3839
import de.codecentric.boot.admin.server.web.AdminController;
@@ -50,10 +51,13 @@ public class UiController {
5051

5152
private final Settings uiSettings;
5253

53-
public UiController(String publicUrl, UiExtensions uiExtensions, Settings uiSettings) {
54+
private final CssColorUtils cssColorUtils;
55+
56+
public UiController(String publicUrl, UiExtensions uiExtensions, Settings uiSettings, CssColorUtils cssColorUtils) {
5457
this.publicUrl = publicUrl;
5558
this.uiExtensions = uiExtensions;
5659
this.uiSettings = uiSettings;
60+
this.cssColorUtils = cssColorUtils;
5761
}
5862

5963
@ModelAttribute(value = "baseUrl", binding = false)
@@ -97,6 +101,23 @@ public Map<String, Object> getUser(@Nullable Principal principal) {
97101
return emptyMap();
98102
}
99103

104+
@ModelAttribute(value = "cssColors", binding = false)
105+
public Map<String, String> getCssColors() {
106+
var palette = uiSettings.getTheme().getPalette();
107+
return Map.of(
108+
"shade50Rgb", cssColorUtils.hexToRgb(palette.getShade50()),
109+
"shade100Rgb", cssColorUtils.hexToRgb(palette.getShade100()),
110+
"shade200Rgb", cssColorUtils.hexToRgb(palette.getShade200()),
111+
"shade300Rgb", cssColorUtils.hexToRgb(palette.getShade300()),
112+
"shade400Rgb", cssColorUtils.hexToRgb(palette.getShade400()),
113+
"shade500Rgb", cssColorUtils.hexToRgb(palette.getShade500()),
114+
"shade600Rgb", cssColorUtils.hexToRgb(palette.getShade600()),
115+
"shade700Rgb", cssColorUtils.hexToRgb(palette.getShade700()),
116+
"shade800Rgb", cssColorUtils.hexToRgb(palette.getShade800()),
117+
"shade900Rgb", cssColorUtils.hexToRgb(palette.getShade900())
118+
);
119+
}
120+
100121
@GetMapping(path = "/", produces = MediaType.TEXT_HTML_VALUE)
101122
@RegisterReflectionForBinding(String.class)
102123
public String index() {

0 commit comments

Comments
 (0)