我想要一个自动填充功能,它应该显示我在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的新手,所以在这里感谢一些帮助。
答案 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
。