2011-12-03 32 views
5

Tôi gặp sự cố khi sử dụng JSF để hiển thị một số dữ liệu trong Facelets. Tôi có danh sách các hashmaps:Làm thế nào để hiển thị danh sách các hashmaps trong ui: lặp lại?

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

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

tôi có được điều này như sau từ cơ sở dữ liệu:

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

Vì vậy, vấn đề của tôi là làm thế nào để hiển thị thông tin cho tất cả các bản đồ trong xhtml. Tôi cố gắng sử dụng ui:repeat nhưng điều đó là sai vì vậy tôi cần trợ giúp. Tôi phải có getter cho tên và gia đình nhưng làm thế nào tôi nên thêm nó?

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

Tôi hy vọng bạn hiểu được sự cố của mình và sẽ giúp tôi khắc phục sự cố. Cảm ơn trước!

Trả lời

3

Do đó, #{persons}Map<String, String>. Bạn có thể truy cập các giá trị bản đồ bằng các khóa theo cách tương tự như Javabeans bình thường. Vì vậy, #{person.name} sẽ trả lại map.get("name").

Vì vậy, điều này sẽ làm:

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

(Tôi chỉ đổi tên persons để person, bởi vì nó chủ yếu chỉ đại diện cho một người)

Cách sau đây là bằng cách này cũng có giá trị và nó thực sự sẽ là cách duy nhất nếu bạn có khóa bản đồ có dấu chấm:

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

(bạn thấy, bạn rất thân thiết, bạn chỉ quên cú đúp đóng)

Việc thực hành bình thường, tuy nhiên, là để tạo ra một lớp JavaBean thay vì một Map nếu nó thực sự đại diện cho một tổ chức.

public class Person { 

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

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

Và cho nguồn cấp dữ liệu đó là List<Person> vào chế độ xem.

+0

Thực sự cảm ơn, tôi đã sửa nó! :) –

+0

Bạn được chào đón. – BalusC

Các vấn đề liên quan