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

Ste*_*nov 6 jsf facelets el

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

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

public List getPersons() {
    return this.persons;
}
Run Code Online (Sandbox Code Playgroud)

我从数据库得到如下:

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);
}
Run Code Online (Sandbox Code Playgroud)

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

<ui:repeat value="#{class.persons}" var="persons">   
  <h:outputText value="#{persons['name'}"/>
  <h:outputText value="#{persons['family'}"/>                       
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 4

因此#{persons}是一个Map<String, String>。您可以像普通 Javabean 一样通过键访问映射值。所以#{person.name}才会回来map.get("name")

所以,这应该做:

<ui:repeat value="#{class.persons}" var="person">   
  <h:outputText value="#{person.name}"/>
  <h:outputText value="#{person.family}"/>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

(我只是重命名personsperson,因为它本质上只代表一个人)

顺便说一句,以下方法也是有效的,如果您有包含句点的映射键,这实际上是唯一的方法:

<ui:repeat value="#{class.persons}" var="persons">   
  <h:outputText value="#{persons['name']}"/>
  <h:outputText value="#{persons['family']}"/>                       
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

(你看,你很接近,你只是忘记了右大括号)

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

public class Person {

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

    // Add/generate getters/setters and other boilerplate.
}
Run Code Online (Sandbox Code Playgroud)

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