gpt4 book ai didi

java - 表单中的 Playframework java 枚举类型选择验证为错误。实际数据无效

转载 作者:太空宇宙 更新时间:2023-11-04 12:27:23 25 4
gpt4 key购买 nike

我有一个枚举:

public enum IML {
VARIANT_I(1, "Wariant I"),
VARIANT_II(2, "Wariant II"),
VARIANT_III(3, "Wariant III"),
VARIANT_PREMIUM(4, "Wariant Premium");

public int id;
public String name;

IML(int id, String name) {
this.id = id;
this.name = name;
}
public static Map<String, String> getOptions() {
LinkedHashMap<String, String> options = new LinkedHashMap<String, String>();
for (IML e: IML.values()) {
options.put(String.valueOf(e.id), e.name);
}
return options;
}
}

我将其放入 View 层中的选择助手中:

@select(
imlForm("variant"),
options(IML.getOptions()),
'_label -> "Variant"
)

并在 Controller 中验证:

public static Result submit{} {
...
System.out.println(form.field("variant").value());
System.out.println(form);
...
}

当我将此选择字段留空时没问题,但是当我选择任何选项时,我收到验证错误:

errors={variant=[ValidationError(variant,error.invalid,[])]})

当我在控制台中打印此字段时,我得到的整数等于 <select><options value=""参数。

我做错事了。有人能指出我这一点吗?不应该自动将表单中的值绑定(bind)到正确的枚举吗?请帮忙。

最佳答案

这是我自己想出来的。在其名称上 Play 绑定(bind)枚举,而不是任何自定义参数。所以我需要更改这一行:

        options.put(String.valueOf(e.id), e.name);

进入

        options.put(String.valueOf(e.name()), e.name);

其中方法 name()java.lang.Enum 类上声明

关于java - 表单中的 Playframework java 枚举类型选择验证为错误。实际数据无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com