0

我想要一个自动完成功能,它应该显示我在 Enum 类中指定的项目的建议:

public enum Units {

      PERCENT, MILLIMETER, METER, NUMBER
}

我在某个类中有一个返回这些值的方法:

public final List<Unit> getUnits() {
    List<Unit> items = new ArrayList<Unit>();
    Unit[] units = Unit.values();
    for (int i = 0; i < units.length; i++) {
        items.add(units[i]);
    }
    return items;
}

由于要建议的项目没有 setter 和 getter,我应该如何实现自动完成的 completeMethod?我是 Primefaces 和 JSF 的新手,所以在这里感谢一些帮助。

4

1 回答 1

3

units[i]您可以使用或通过访问枚举名称units[s].name()。您还可以使用 将字符串值转换为枚举Unit.valueOf("PERCENT")。您的completeMethod遗嘱如下:

public List<String> completeEnum(String query) {
    List<String> match = new ArrayList<String>();
    Unit[] units = Unit.values();
    for (int i = 0; i < units.length; i++) {
        if (units[i].name().contains(query))
            match.add(units[i]);
    }
    return match;
}

为 value 提供一个普通的 String 属性autocomplete

<p:autocomplete value="#{bean.enumString}" completeMethod="#{bean.completeEnum}"/>

并将选定的字符串转换为Unitgetters/setters:

private Unit unit;
private String enumString;

public String getEnumString() {
    return this.enumString;
}

public void setEnumString(String enumString) {
    this.unit = Unit.valueOf(enumString);
}

请注意,如果提供的 StringUnit.valueOf(String)无法java.lang.IllegalArgumentException转换为Unit.

于 2013-01-09T06:13:01.543 回答