0

要素を含む JSF ページがあり<h:selectManyMenu>ます。value 属性は、サブクラスで type として定義された汎用オブジェクトを指しますArrayList<String>。Java のドキュメントによると、この具象型のUISelectManyとして変換から値を返す必要があります。Collectionしかし、それはString[]配列として返されています。私は何が欠けていますか?

<h:selectManyMenu value="#{parameter.value}">
    <f:selectItems value="#{parameter.valueList}"/>
</h:selectManyMenu>
public class Parameter<ArrayList<String>> extends ParentClass
{
  private LinkedHashMap<Object, String> valueList;

  public List<SelectItem> getValueList()
  {
    ArrayList<SelectItem> list = new ArrayList<SelectItem>();
    for (Iterator<Object> i = this.valueList.keySet().iterator(); i.hasNext();)
    {
      Object value = i.next();
      list.add(new SelectItem(value, this.valueList.get(value)));
    }

    return list;
  }
}
public abstract class ParentClass<T>
{
  private T value;

  public T getValue() { return this.value; }
  public void setValue(T t) { this.value = t; }
}
4

2 に答える 2

0

サブクラスからプロパティの型定義を JSF に読み込ませることができませんでした。属性の指定はcollectionType機能せず@Override、サブクラスでメソッドを作成しようとしても、Bean に送信されるバッキング値はまだString[]配列でした。JSF サーブレットがこの値を返すようにする唯一のArrayList<String>方法は、サブクラスに get/set プロパティ メソッドの追加のペアをArrayList<String>、戻り値とパラメーターの型として作成することでした。

public class Parameter extends ParentClass<ArrayList<String>>
{
  public ArrayList<String> getManyValue() { return super.getValue(); }
  public void setManyValue(ArrayList<String> value) { super.setValue(value); }
}


public abstract class ParentClass<T>
{
  protected T value;
  public T getValue() { return this.value; }
  public void setValue(T value) { this.value = value; }
}


<h:selectManyMenu value="#{parameter.manyValue}"/>
于 2015-07-08T20:48:00.110 に答える