在JSF页面中显示HashMap数据

时间:2012-11-01 20:51:33

标签: jsf primefaces hashmap el

我正在努力在诸如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>>();
  

//他们的吸气者和制定者。

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页面

的字段中显示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="................" />  

我需要一些指示。

2 个答案:

答案 0 :(得分:3)

要解决您的问题,请在您的bean中添加一个get方法,以便从地图中获取KeySet,如

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

然后在jsf页面中放置repeat标记以迭代并显示键

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

但是我不建议在地图中使用地图,而是建议创建一个名为Person的简单类,并在那里保留值,然后只使用像

这样的地图
private Map<String, Person> dataMap = new HashMap();

希望你能继续。

答案 1 :(得分:0)

你可以像在

中那样在常规游戏中侥幸逃脱
  value = "#{yourBean.map.firstKey.nestedKey}"

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