Jsf 如何实现Primefaces自动完成&x27;枚举类项的completeMethod?

Jsf 如何实现Primefaces自动完成&x27;枚举类项的completeMethod?,jsf,autocomplete,primefaces,Jsf,Autocomplete,Primefaces,我想要一个自动完成,它应该显示我在枚举类中指定的项的建议: public enum Units { PERCENT, MILLIMETER, METER, NUMBER } 我在某个类中有一个返回以下值的方法: public final List<Unit> getUnits() { List<Unit> items = new ArrayList<Unit>(); Unit[] units = Unit.values();

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

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;
}
public final List getUnits(){
列表项=新建ArrayList();
单位[]单位=单位值();
对于(int i=0;i

既然要建议的项目没有setter和getter,我应该如何实现autocomplete的completeMethod?我不熟悉Primefaces和JSF,因此在此感谢您的帮助。

您可以使用
units[I]
或通过
units[s].name()访问枚举名称。您还可以使用
Unit.valueOf(“百分比”)
将字符串值转换为enum。您的
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;
}
并将所选字符串转换为getter/setters中的
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
,您可以使用
units[i]
或通过
units[s].name()访问枚举名称。您还可以使用
Unit.valueOf(“百分比”)
将字符串值转换为enum。您的
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;
}
并将所选字符串转换为getter/setters中的
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

下面发布的解决方案对您有效吗?@akoskm-是的,有效。谢谢标记为已接受答案。下面发布的解决方案对您有效吗?@akoskm-是的,有效。谢谢标记为被接受的答案。