如何在ui中显示哈希图列表:重复?

时间:2011-12-03 01:47:29

标签: jsf facelets el

使用JSF在Facelets中显示一些数据时遇到问题。我有一个哈希图列表:

List<Map<String, String>> persons = new LinkedList<Map<String,String>>();

public List getPersons() {
    return this.persons;
}

我从数据库得到如下:

while(rs.next()) {
  Map<String,String> result = new HashMap<String,String>();
  result.put("name", rs.getString(1));
  result.put("category", rs.getString(2));
  this.persons.add(result);
}

所以,我的问题是如何在xhtml中显示每个地图的信息。我尝试使用ui:repeat,但这是错误的,所以我需要帮助。我必须得到名字和家人的吸气,但我该如何添加呢?

<ui:repeat value="#{class.persons}" var="persons">   
  <h:outputText value="#{persons['name'}"/>
  <h:outputText value="#{persons['family'}"/>                       
</ui:repeat>

我希望你理解我的问题,并帮助我解决它。提前谢谢!

1 个答案:

答案 0 :(得分:3)

#{persons}因此是Map<String, String>。您可以按照与普通Javabeans相同的方式按键访问地图值。因此#{person.name}将返回map.get("name")

所以,这应该做:

<ui:repeat value="#{class.persons}" var="person">   
  <h:outputText value="#{person.name}"/>
  <h:outputText value="#{person.family}"/>
</ui:repeat>

(我只将persons重命名为person,因为它实际上只代表一个人)

以下方式也是有效的,如果你有一个包含句点的地图密钥,它实际上是唯一的方法:

<ui:repeat value="#{class.persons}" var="persons">   
  <h:outputText value="#{persons['name']}"/>
  <h:outputText value="#{persons['family']}"/>                       
</ui:repeat>

(你知道,你很接近,你只是忘了关闭括号)

但是,通常的做法是创建一个Javabean类而不是Map,如果它实际上代表一个实体。

public class Person {

    private String name;
    private String family;
    // ...

    // Add/generate getters/setters and other boilerplate.
}

并将其作为List<Person>提供给视图。