2010-05-02 24 views
10

Tengo una clase de usuario que tiene un nombre de usuario String en ella. Tengo una lista de usuarios que estoy tratando de mostrar en una tabla utilizando¿Cómo se itera a través de una lista de objetos?

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

Las filas están siendo visualizado el número correcto de veces, así que es iteración a través de mi lista correctamente. Sin embargo, no sé cómo acceder a la propiedad del nombre de usuario para mostrarla. Obviamente, lo que tengo arriba no es correcto ... ¿Alguna idea?

Respuesta

2

Puede usar JSTL con Struts. Tiene una etiqueta <c:forEach> en su biblioteca central que le permitirá iterar fácilmente a través de una lista o cualquier otra colección.

0

Struts 1.x se encarga de sus propiedades internas de esta manera.

< lógica: Iterar id = "usuario" name = "lista_usuarios"> < frijol: escribir propiedad = "$ {username}" /> </lógica: Iterar>

supongo según tu ejemplo puedes tener. Es posible que no necesites "#list". de nuevo en el atributo de valor < s: valor iterador = "usuarios" id = "lista"> < s: valor de la propiedad = "nombre de usuario" /> </s: iterador>

16

En primer lugar, en Struts2 2.1. x el atributo id está en desuso, var debe usarse en lugar (ref)

Creo que el # se utiliza mal allí. Además, "lista" parece un mal nombre para lo que se asignará en cada iteración ... Creo que "usuario" es más apropiado.

IIRC, la sintaxis es

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

Además, no es necesario asignar el elemento actual del iterador para un caso tan simple. Esto también debería funcionar:

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

También es posible que desee probar esto:

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

ACTUALIZACIÓN: he corregido lo de la #, que estaba bien.

+0

Gracias por su respuesta. Usando su segunda sugerencia, no aparece nada para la salida. No estoy seguro de por qué ... Cuando hago su última sugerencia, cada fila en la tabla se ve básicamente como [email protected], pero cada valor hexadecimal después de @ es diferente. – Kevin

+0

También es interesante, tengo una propiedad int llamada "id" en mi clase de usuario que funciona si coloco "id" donde tengo "nombre de usuario" arriba. Ninguna de las otras propiedades de cadena funciona, pero la propiedad int sí ... – Kevin

+0

¿Tiene la clase package.entity.User un método sensible toString()? ¿Y tiene un método getUsername()? – leonbloy

3

Puede hacer como esto

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

observar que no hay necesidad de #list allí.

La otra forma es

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

insetead de Identificación dan como var.Desde no especificamos un alcance para var, esta nueva usuario existe en el alcance de acción predeterminado "action-the ActionContext". Como puede ver , luego lo referenciamos con el operador #.

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

Comprobar this para más ejemplos de este tipo

Cuestiones relacionadas