如何为Enum类的项目实现Primefaces Autocomplete的completeMethod?

时间:2013-01-09 03:14:56

标签: jsf autocomplete primefaces

我想要一个自动填充功能,它应该显示我在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;
}

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

1 个答案:

答案 0 :(得分:3)

您可以使用units[i]units[s].name()访问枚举名称。您还可以使用Unit.valueOf("PERCENT")将String值转换为枚举。您的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;
}

autocomplete值提供一个普通的String属性:

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

并将所选字符串转换为getter / setter中的Unit

private Unit unit;
private String enumString;

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

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

请注意,如果提供的字符串无法转换为Unit.valueOf(String)java.lang.IllegalArgumentException可以抛出Unit