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

发布于 2024-12-19 13:20:25 字数 833 浏览 2 评论 0原文

我在使用 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>

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

I have a problem using JSF to display some data in Facelets. I have list of hashmaps:

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

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

I get this as follows from database:

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);
}

So, my problem is how to display info for every map in xhtml. I try to used ui:repeat but it is wrong so I need help. I must have getter for name and family but how should I add it?

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

I hope you understand my problem and will help me to fix it. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夢归不見 2024-12-26 13:20:25

因此,#{persons} 是一个Map。您可以像普通 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>

(我只将 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 提供给视图。

The #{persons} is thus a Map<String, String>. You can access map values by keys in the same way as normal Javabeans. So #{person.name} will return map.get("name").

So, this should do:

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

(I only renamed persons to person, because it essentially represents only one person)

The following way is by the way also valid and it would actually be the only way if you have a map key which contained periods:

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

(you see, you were close, you only forgot the closing brace)

The normal practice, however, is to create a Javabean class instead of a Map if it actually represents an entity.

public class Person {

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

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

And feed it as List<Person> to the view.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文