如何为枚举类的项目实现Primefaces自动完成的complete方法?



我想有一个自动完成,它应该显示我在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;
}

我应该如何实现自动完成的completemmethod,因为没有setter和getter的项目是建议?我是Primefaces和JSF的新手,所以非常感谢您的帮助。

您可以使用units[i]或通过units[s].name()访问enum名称。也可以使用Unit.valueOf("PERCENT")将字符串值转换为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;
}

autocomplete值一个纯字符串属性:

<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, Unit.valueOf(String)可以抛出java.lang.IllegalArgumentException

相关内容

  • 没有找到相关文章

最新更新