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

标签 java forms validation playframework enums

我有一个枚举:

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/

相关文章:

java - 什么取代了 iText 7 中的 block ?

java - (java) <name> 无法解析为变量

java - 如何远程创建Activiti BPM流程

javascript - 在不使用经典 html 表单的情况下,在 Web 应用程序中存储隐藏值的最佳实践是什么?

jQuery 插件 : Validation- labels are getting hidden

java - SPRING MVC 无法从 json 获取参数

javascript - 单击按钮时输入框值显示为空白

java - 如何检测文件类型的表单输入元素是否为空

javascript - jQuery 确保填写所有表单字段

forms - Symfony2 表单 : Select an entity or add a new one