Duda Aplicación con Structs 2

bLero

Hola chicos,

Me estoy iniciando en el mundo de Struts y estoy probando con la programación de una tienda de ropa sobre JBoss. Utilizo la mayoria de patrones de diseño (Capas, Fachadas, DAO's, Factorias..).

Actualmente la aplicación me muestra mi catálogo de ropa desde la base de datos, lo que hago básicamente es recuperar toda la ropa en un Set<Ropa> que va subiendo por las capas hasta llegar al ConsultaCatalogoAction. Donde mediante un jsp con un iterator de structs saco por pantalla la ropa.

El código jsp es básicamente el siguiente:

<table>
<s:iterator id="prenda" value="%{prendas}" >
	<tr>
		<td><s:property value="ref" /></td>
		<td><s:property value="descripcion"/></td>
		<td><s:property value="tipo"/></td>
		<td><s:property value="marca"/></td>
		<td><img src="images/ref/<s:property value="ref" />.jpg" /></td>
	</tr>
</s:iterator>
</table>

El problema de esto es que me deja toda la ropa sin ordenar, entonces mi idea era poner un combobox con las opciones 'nombre','tipo','precio' y que se me ordene automáticamente la ropa al seleccionar una de las opciones pero nose cómo hacer eso.

joselichu007

Pues puedes pasarte varias listas diferentes ya ordenadas en el Action por los tres tipos y dependiendo de lo que elijas en el combo que muestre una u otra a través de JavaScript (función onchange) u ordenarlas directamente en JavaScript. Yo veo más fácil hacerlo en el Action y más eficiente.

Saludos!

bLero

Necesitaria filtrar las prendas por tipo = camisa por ejemplo.

Sé que se puede hacer directamente con Struts tags y que tiene que ser algo así

<s:iterator id="prenda" value="%{? prendas.tipo == 'camisa'}" >

pero no estoy utilizando la sintaxis correcta y no me muestra nada :S

bLero

solucionado, la sintaxis era así:

<s:iterator id="prenda" value="prendas.{? #this.tipo == 'camisa'}" >
bLero

Tengo un nuevo problema:

tengo un ArrayList<String> tipos y un Set<prendas>

y quiero anidar 2 iterators de la siguiente forma:

<s:iterator value="tipos" >
         <s:iterator value="prendas.{? #this.tipo == <s:property />}" >
	       <tr>
		       <td><s:property value="ref" /></td>
		       <td><s:property value="descripcion"/></td>
		       <td><s:property value="tipo"/></td>
		       <td><s:property value="marca"/></td>
		       <td><img src="images/ref/<s:property value="ref" />.jpg" /></td>
	       </tr>
        </s:iterator>
</s:iterator>

El problema es que esto no funciona porque creo que deberia identificar el <s:property> de cada iterator pero nose como hacerlo.

Khanser

Debes usar el atributo "var" de iterator para declarar el nombre del objeto de cada iteración.

<s:iterator value="tipos" var="tipo" >
         <s:iterator value="prendas.{? #this.tipo == <s:property value="tipo" />}" var="prenda">
               <tr>
                       <td><s:property value="prenda.ref" /></td>
                       <td><s:property value="prenda.descripcion"/></td>
                       <td><s:property value="prenda.tipo"/></td>
                       <td><s:property value="prenda.marca"/></td>
                       <td><img src="images/ref/<s:property value="prenda.ref" />.jpg" /></td>
               </tr>
        </s:iterator>
</s:iterator>

No lo he probado, pero los tiros deberían ir por ahí :)

bLero

he probado pero nada

B

Me llamaréis maniático, pero juraría que es Struts2

1 respuesta
bLero

#8

sí, lo és

1
11 días después
dagavi

Aprovecho el post para preguntar una duda:

¿Como coño se usa el convention plugin? Vamos, poder usar anotaciones + convenciones en vez de XML.

Es que hago lo que pone un libro que tengo (Struts 2 in action), así como lo que he leído en otros blogs y solo consigo, sobre Google App Engine, que al llamar a una acción lance un:

There is no Action mapped for namespace [/test] and action name [Test] associated with context path [].

Lo he probado de 1000 formas (en cuanto a forma de poner las clases, etc).

Este mismo es una clase TestAction extends ActionSupport (por si no me iba con lo del ActionSupport también le he añadido el "Action" al nombre) en el paquete actions.test

Si he conseguido ejecutar la acción si encima del "execute" le pongo un @Action("/Testeando" ) y llamo a "Testeando" pero eso no es la gracia, la gracia sería una URL automática a partir de los packages + nombre de la clase.

Usuarios habituales