【发布时间】:2021-11-04 15:39:03
【问题描述】:
我在尝试将组合框绑定到我的模型时遇到了这个问题。 枚举值在后端提交到我的端点类时为空。
<vaadin-combo-box label="identifier type" id="identifier_type"
${field(this.binder.model.entity.identification.idType)}
.items="${Object.values(KeyType)}">
</vaadin-combo-box>
Java 枚举如下所示:
public enum KeyType {
CUSTOM("Custom"),
IRDI("IRDI"),
IRI("IRI"),
IDSHORT("IdShort"),
FRAGMENTID("FragmentId");
...
}
但是生成的 ts 枚举是这样的:
enum KeyType {
CUSTOM = 'CUSTOM',
IRDI = 'IRDI',
IRI = 'IRI',
IDSHORT = 'IDSHORT',
FRAGMENTID = 'FRAGMENTID',
}
所有值都变为大写,这就是为什么 binder 无法匹配具有驼峰写法的值,从而导致字段为空值。
这可以配置吗,这是设计使然,还是一个错误?
谢谢&BR 丹尼尔
【问题讨论】:
-
对于代码生成,Fusion 使用枚举值的实际名称 (FRAGMENTID),而不是传递给构造函数的字符串值 ("FragmentId")。在您传递给构造函数的所有参数可以是任何类型(例如布尔值)之后,它可能不是唯一的,并且可能有多个。除此之外,您的代码看起来不错,而且我无法重现您的值未正确映射的问题。
-
我现在通过在 KeyType 类的 @JsonCreator fromValue 方法中放置一个 equalsIgnoreCase 而不是 equals 来“修复它”。
标签: java enums vaadin vaadin21 hilla