使用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>
我希望你理解我的问题,并帮助我解决它。提前谢谢!
答案 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>
提供给视图。