0

我正在努力在诸如 inputtext、selectonemenu 等 primefaces 小部件中显示 hashmap 的内容。

我已经定义了 hasmaps

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

// 他们的 getter 和 setter。

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,它将从 bean 获取 id =001 或 id =002 的数据并显示在 xhtml 页面和 . 我无法在 xhtml 页面的字段中显示地图中的数据

片段

  @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页面中放置repeat标签来迭代并显示key

<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}"

但我必须说你的设计不推荐。完全没有。每个实体的地图的地图?如果您只是将所有数据封装在一个类中,您的工作会简单得多。

于 2012-11-02T06:12:15.803 回答