【问题标题】:Display HashMap data in JSF page在 JSF 页面中显示 HashMap 数据
【发布时间】:2012-11-01 20:51:32
【问题描述】:

我正在努力在诸如 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 页面的字段中显示地图中的数据

sn-p

  @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="................" />  

我需要一些指示。

【问题讨论】:

标签: jsf primefaces hashmap el


【解决方案1】:

要解决您的问题,请在您的 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();

希望你能继续。

【讨论】:

  • 根本不要使用地图。 DAO tutorial - the data layer
  • 当然可以。有很多帖子都有这样的解决方案。我的意思是他不应该将地图用于此类目的,例如实体查找。我认为这是错误的方式,也许你应该在你的帖子中提到这一点,就像下面的 kolossus 所做的那样。实体地图...
  • 如何同时打印值和键@vels4j
【解决方案2】:

您可以像在

中一样在常规 el 中摆脱它
  value = "#{yourBean.map.firstKey.nestedKey}"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2012-07-10
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    相关资源
    最近更新 更多