0

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 をどのように実装すればよいですか? 私は Primefaces と JSF を初めて使用するので、ここで助けていただければ幸いです。

4

1 に答える 1

3

units[i]を使用して、またはを介して列挙型の名前にアクセスできますunits[s].name()。文字列値を。で列挙型に変換することもできますUnit.valueOf("PERCENT")。あなたは次の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;
}

値にプレーンなStringプロパティを指定しautocompleteます。

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

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.IllegalArgumentExceptionUnit

于 2013-01-09T06:13:01.543 に答える