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