Linkki教程项目触发BeanCreationException,请求异常排查
排查Linkki项目BeanCreationException(无法读取SearchSectionPmo.searchText属性)
可能的原因及对应解决方案
1. 检查JavaBean属性访问规范
Linkki严格遵循JavaBean属性规则,SearchSectionPmo的searchText必须有符合规范的Getter/Setter:
- Getter需为
public String getSearchText()(布尔类型用isXXX),无参数 - Setter需为
public void setSearchText(String searchText),参数类型与字段一致 - 必须提供Getter,Linkki读取属性依赖此方法
正确示例:
public class SearchSectionPmo { private String searchText; public String getSearchText() { return searchText; } public void setSearchText(String searchText) { this.searchText = searchText; } // Linkki绑定方法... }
2. 验证Linkki注解配置
确保UI组件注解(如@TextField)的property属性与字段名完全匹配:
- 避免大小写错误(如
property = "SearchText") - 若注解直接标注在Getter上,可省略
property,默认匹配属性名
3. 确认依赖版本兼容性
Vaadin 23.1.3需搭配适配的Linkki版本:
- Linkki 2.x系列对应Vaadin 23.x,建议使用Linkki 2.2.x或2.3.x版本
- 检查构建文件(pom.xml/gradle),排除不同版本的Vaadin或Linkki依赖冲突
4. 检查PMO类的访问权限
SearchSectionPmo必须是public类,保证Spring能扫描并实例化- 若PMO依赖其他Bean,确保构造函数支持Spring注入;无依赖则保留无参构造
5. 从异常堆栈定位具体问题
查看堆栈最底层的异常类型:
NoSuchMethodException:说明缺少对应Getter/SetterIllegalAccessException:说明Getter/Setter不是public修饰
常见错误修正示例
如果你的PMO代码缺少Getter,导致读取失败:
// 错误代码 public class SearchSectionPmo { private String searchText; public void setSearchText(String searchText) { this.searchText = searchText; } @TextField(label = "Search") public void bindSearchText() {} } // 修正后代码 public class SearchSectionPmo { private String searchText; public String getSearchText() { return searchText; } public void setSearchText(String searchText) { this.searchText = searchText; } @TextField(label = "Search") public void bindSearchText() {} }
内容的提问来源于stack exchange,提问作者Alex93
相关产品推荐
相关产品推荐

