0

inputtext、selectonemenuなどのprimefacesウィジェットにハッシュマップのコンテンツを表示するのに苦労しています.

hasmaps を定義しました

  private Map<String, String> subIdMap = new HashMap<String, String>();
  private Map<String, Map<String, String>> dataMap = new HashMap<String, Map<String, String>>();

// それらのゲッターとセッター。

SubIdMap にはキーと値が含まれています

ID 001 の場合

private Map<String, String> subIdMap = new HashMap<String, String>();
subIdMap.put("id", "001");
subIdMap.put("name", "Alexender");
subIdMap.put("age", "24");
subIdMap.put("sex", "Male");
subIdMap.put("country", "Greece");

ID = 002 の場合

private Map<String, String> subIdMap = new HashMap<String, String>();

subIdMap.put("id", "002");
subIdMap.put("name", "John");
subIdMap.put("age", "25");
subIdMap.put("sex", "Male");
subIdMap.put("country", "US");

dataMap は、ID をキーとして、subIdMap を値として持つマップです。

 private Map<String, Map<String, String>> dataMap = new HashMap<String, Map<String, String>>();

dataMap.put("001", subIdMap);
or
dataMap.put("002", subIdMap);

ユーザーが id 001 をクリックすると、id = 001 または id = 002 のデータが bean から取得され、xhtml ページに表示されるページがあります。xhtml ページのフィールドに Map からのデータを表示できません

スニペット

  @ManagedBean(name = "sampleBean")
    @ViewScoped
    public class SampleBean implements Serializable{

    private Map<String, String> subIdMap = new HashMap<String, String>();
     private Map<String, Map<String, String>> dataMap = new HashMap<String, Map<String, String>>();

public SampleBean() {

subIdMap.put("id", "001");
subIdMap.put("name", "Alexender");
subIdMap.put("age", "24");
subIdMap.put("sex", "Male");
subIdMap.put("country", "Greece");

dataMap.put("001",subIdMap);

    }


    /**
         * @return the subIdMap
         */
        public Map<String, String> getSubIdMap() {
            return subIdMap;
        }

        /**
         * @param subIdMap the subIdMap to set
         */
        public void setSubIdMap(Map<String, String> subIdMap) {
            this.subIdMap = subIdMap;
        }

    /**
         * @return the dataMap
         */
        public Map<String, Map<String, String>> getDataMap() {
            return dataMap;
        }

        /**
         * @param dataMap the dataMap to set
         */
        public void setDataMap(Map<String, Map<String, String>> dataMap) {
            this.dataMap = dataMap;
        }

    }

xhtml ページ

<p:inputText id="textId" value="............." />

<p:selectOneMenu id="selectId" value="................" />  

ここで道順が必要です。

4

2 に答える 2

3

問題を解決するには、bean に get メソッドを追加して、次のようにマップから KeySet を取得します。

 public List getKeyList() {
        return new ArrayList(dataMap.keySet());
 }

次に、jsfページに繰り返しタグを配置して、キーを繰り返し表示します

<ui:repeat value="#{newJSFManagedBean.keyList}" var="key">
            Key : <h:outputText value="#{key}"/>
</ui:repeat>

ただし、マップ内でマップを使用する代わりに、という名前の単純なクラスを作成してPersonそこに値を保持し、次のようなマップを使用することをお勧めします

private Map<String, Person> dataMap = new HashMap();

続行できることを願っています。

于 2012-11-02T06:50:16.840 に答える
0

次のように、通常のelでそれを回避できます

  value = "#{yourBean.map.firstKey.nestedKey}"

しかし、あなたのデザインはお勧めできません。まったく。すべてのエンティティのマップのマップ? すべてのデータを 1 つのクラスにカプセル化すれば、作業はずっと簡単になります。

于 2012-11-02T06:12:15.803 に答える