我有一个枚举:
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/