0

私は Hashtable を持っています。それを selecteOneMenu に表示したいのですが、どうすればいいですか?

itemCat = new Hashtable<Integer,String>();
    itemCat.put(0,"Functional");
    itemCat.put(1, "Interoperability");
    itemCat.put(2, "Load");
    itemCat.put(3, "Performance");
    itemCat.put(4, "Disponibility");
    itemCat.put(5, "Security");
    itemCat.put(6, "Usability");
    itemCat.put(7, "Other");

 <p:selectOneMenu value="#{projectRequirementManagementMB.selectedCat}" filter="true" filterMatchMode="startsWith" >  
                                       <f:selectItem itemLabel="Select One" itemValue="" />  
                                <f:selectItems value=" {projectRequirementManagementMB.hereShouldbeCategoryValues}" />  
                                     </p:selectOneMenu>  

どんなアイデアでも歓迎されます

4

1 に答える 1

1

は、次のインターフェイス<f:selectItems>をすでにサポートしています。Map

<f:selectItems value="#{projectRequirementManagementMB.itemCat}" />

だけで

public Map<Integer, String> getItemCat() {
   return itemCat;
}

ただし、マップ キーはアイテム ラベルとして解釈され、マップ値はアイテム値として解釈されます。モデルでマップのキー/値を交換できない場合は<f:selectItems>、環境が EL 2.2 をサポートしている場合 (質問履歴でこれが確認されています)、次のようにビューでそれらを交換する必要があります。

<f:selectItems value="#{projectRequirementManagementMB.itemCat.entrySet()}" 
     var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />

以下も参照してください。


具体的な問題とは関係ありませんが、 aはかなりレガシーなデータ構造 (Java 1.0、1996Hashtable年から!!) であり、代わりにその後継を使用する必要がありますHashMap。ただし、これはHashtable別の問題として似ています: 本質的にアイテムはまったく注文されていません。LinkedHashMap挿入順序を維持したい場合、またはキーTreeMapの自動ソートが必要な場合に使用します。

itemCat = new LinkedHashMap<Integer, String>();
于 2012-11-22T12:28:18.593 に答える