2010-05-02 24 views
10

Tôi có một lớp người dùng có một tên người dùng String trong đó. Tôi có một danh sách người dùng mà tôi đang cố gắng hiển thị trong một bảng bằng cách sử dụngLàm thế nào để bạn lặp qua danh sách các đối tượng?

      <s:iterator value="users" id="list"> 
           <tr> 
            <td><s:property value="#list.username" /></td> 
            <td></td> 
            <td></td> 
            <td></td> 
           </tr> 
         </s:iterator> 

Các hàng này được hiển thị đúng số lần, vì vậy nó đang duyệt qua danh sách của tôi đúng cách. Tuy nhiên, tôi không biết cách truy cập thuộc tính tên người dùng để hiển thị nó. Rõ ràng những gì tôi có ở trên là không chính xác ... Bất kỳ ý tưởng?

Trả lời

2

Bạn có thể sử dụng JSTL với Struts. Nó có một thẻ <c:forEach> trong thư viện lõi của nó, cho phép bạn lặp qua danh sách hoặc bất kỳ bộ sưu tập nào khác một cách dễ dàng.

0

Struts 1.x quản lý các thuộc tính bên trong của bạn như thế này.

< logic: lặp id = "user" name = "USERLIST"> < đậu: viết hữu = "$ {userName}" /> </logic: lặp>

Tôi đoán theo u ví dụ u có thể có. Bạn có thể không cần "#list". một lần nữa trong các thuộc tính giá trị < s: Giá trị iterator = "users" id = "list"> < s: giá trị tài sản = "userName" /> </s: iterator>

16

Thứ nhất, trong struts2 2.1. x thuộc tính id không được dùng nữa, thay vào đó, var nên được sử dụng (ref)

Tôi nghĩ rằng # bị lạm dụng ở đó. Bên cạnh đó, "danh sách" có vẻ là một tên xấu cho những gì sẽ được chỉ định trong mỗi lần lặp ... Tôi nghĩ rằng "người dùng" là thích hợp hơn.

IIRC, cú pháp là

<s:iterator value="users" var="user"> 
    ... <s:property value="#user.username" /> 
</s:iterator> 

Hơn nữa, bạn không cần phải gán mục hiện tại trong iterator cho một trường hợp đơn giản như vậy. Điều này cũng nên làm việc:

<s:iterator value="users"> 
    ... <s:property value="username" /> 
</s:iterator> 

Ngoài ra bạn có thể muốn thử điều này:

<s:iterator value="users"> 
     ... <s:property />  <!-- this outputs the full object, may be useful for debugging --> 
    </s:iterator> 

UPDATE: Tôi sửa lại chút về #, nó là ok.

+0

Cảm ơn bạn đã trả lời của bạn. Sử dụng đề xuất thứ hai của bạn, không có gì hiển thị cho đầu ra. Tôi không chắc chắn lý do tại sao ... Khi tôi làm đề nghị cuối cùng của bạn, mỗi hàng trong bảng trông về cơ bản giống như [email protected], nhưng mỗi giá trị hex sau @ là khác nhau. – Kevin

+0

Cũng thú vị, tôi có một thuộc tính int được gọi là "id" trong lớp người dùng của tôi mà không hoạt động nếu tôi đặt "id" nơi tôi có "tên người dùng" ở trên. Không có thuộc tính String nào khác hoạt động, nhưng thuộc tính int hiện ... – Kevin

+0

Bạn có package.entity.User class có phương thức toString() hợp lý không? Và có phương thức getUsername() không? – leonbloy

3

Bạn có thể làm như thế này

<s:iterator value="users" > 
<tr> 
    <td><s:property value="username" /></td> 
    <td></td> 
    <td></td> 
    <td></td> 
</tr> 

Quan sát mà không cần #list đó.

Một cách khác là

<s:iterator value="users" var="user"> 
<tr> 
    <td><s:property value="#user.username" /></td> 
    <td></td> 
    <td></td> 
    <td></td> 
</tr> 

insetead của id cho nó như var.Kể từ chúng tôi không chỉ định phạm vi cho var, tham chiếu người dùng mới tồn tại trong phạm vi "hành động" mặc định — ActionContext. Khi bạn có thể xem, chúng tôi sẽ tham khảo nó bằng toán tử #.

0
<s:iterator value="users" var="eachUser"> 
<div> 
<s:property value="#eachUser.username"> 
</div> 
</s:iterator> 

Kiểm tra this để biết thêm ví dụ như vậy

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