You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 23.3.21中@Theme注解及@JsModule失效问题求助

Vaadin 23.3.21中@Theme注解及Lumo预设失效问题排查

1. 确认AppShellConfigurator类的配置有效性

  • 确保你的配置类正确继承AppShellConfigurator,并且添加了对应环境的作用域注解:Spring环境用@ApplicationScoped,CDI环境用@Dependent,否则框架无法识别该配置类。
    正确示例结构:
    @Theme(value = "material")
    @JsModule("@vaadin/lumo-styles/presets/compact.js")
    @ApplicationScoped
    public class AppShell implements AppShellConfigurator {
    }
    

2. 检查Material主题依赖是否引入

Vaadin Material主题需要单独添加依赖,默认Starter项目仅包含Lumo主题:

  • Maven项目在pom.xml中添加:
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-material-theme</artifactId>
        <version>23.3.21</version>
    </dependency>
    
  • Gradle项目添加:
    implementation 'com.vaadin:vaadin-material-theme:23.3.21'
    
    缺少该依赖时,框架会自动回退到Lumo主题,导致@Theme("material")配置无效。

3. 清除缓存

  • 浏览器端:强制刷新页面(Ctrl+Shift+R / Cmd+Shift+R),或直接清除浏览器缓存,避免旧主题资源被缓存。
  • 项目端:执行构建工具的clean命令,比如Maven的mvn clean install、Gradle的gradle clean build,清除旧编译产物和前端资源缓存。

4. 修正Lumo Dark变体的配置方式

启用Lumo Dark变体不能直接修改@Theme的value,需通过variant属性或页面配置实现:

  • 方式一:通过@Theme注解
    @Theme(value = Lumo.class, variant = Lumo.DARK)
    
  • 方式二:实现PageConfigurator接口
    public class AppShell implements AppShellConfigurator, PageConfigurator {
        @Override
        public void configurePage(Page page) {
            page.addClassNames(Lumo.DARK);
        }
    }
    

5. 修正Lumo预设的JsModule路径

Vaadin 23.x中,Lumo预设的路径已调整,旧路径@vaadin/vaadin-lumo-styles/presets/compact.js已废弃,正确路径为:

@JsModule("@vaadin/lumo-styles/presets/compact.js")

6. 排查自定义主题覆盖

如果项目存在frontend/themes/your-theme自定义主题目录,需检查theme.json是否强制指定Lumo主题,若有则会覆盖@Theme注解配置。可暂时删除自定义主题目录测试是否恢复正常。


内容的提问来源于stack exchange,提问作者Tullio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:13:23