jueves, 11 de noviembre de 2010

SEGUIMOS CON EL PROYECTO

Codigo HTML Propio de una relación ManyToOne: Es decir muchas direcciones tienen el mismo cliente, y un cliente tiene muchas direcciones.

<select name="idCliente">
<option value="1">cliente1</option>
<option value="2" selected>cliente2</option>
<option value="3">cliente3</option>
</select>


Codigo JSP


<select name="idCliente">
<c:forEach items="${requestScope.clientes}" var="cliente">
<option value="${cliente.id}" ${(requestScope.idClienteSeleccionado==cliente.id) ? 'selected' : ' '}>
${cliente.nombre}</option>
</c:forEach>
</select>


VISUALIZACION HTML




Otro ejemplo con datos de coches

<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>


genera:



Y este ejemplo con opcion preseleccionada:

<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat" selected="true">Fiat</option>
<option value="audi">Audi</option>
</select>

genera:




desde java

String idCliente=request.getParameter(
"idCliente");


Codigo adecuado para editar relaciones ManyToMany. En este caso un producto tienen muchos materiales, y un material tiene muchos productos


ManyToMany

<SELECT NAME="materialesIds" MULTIPLE SIZE=5>
<OPTION VALUE="1">material1</OPTION>
<OPTION VALUE="2">material2</OPTION>
<OPTION VALUE="3">material3</OPTION>
<OPTION VALUE="4">material4</OPTION>
<OPTION VALUE="5">material5</OPTION>
</SELECT>

genera:



Con opciones seleccionadas

<SELECT NAME="materialesIds" MULTIPLE SIZE=5>
<OPTION VALUE="1" selected>material1</OPTION>
<OPTION VALUE="2">material2</OPTION>
<OPTION VALUE="3" selected>material3</OPTION>
<OPTION VALUE="4">material4</OPTION>
<OPTION VALUE="5">material5</OPTION>
</SELECT>

genera:




CODIGO JAVA

para realizar la seleccion de materiales de producto incluimos en el modelo que recibe el jsp un atributo que son los ids de materiales que actualmente tiene el producto a editar... y también inluimos las lista de materiales a pintar en el select

List materiales=servicioI.dameTodosLosMateriales();
request.setAttribute("materiales", materiales);
String idsMaterialesActuales="";
for(Material m:dameProducto.getMateriales())
idsMaterialesActuales+=" "+m.getId();
request.setAttribute("idsMaterialesActuales", idsMaterialesActuales);

JSP

incluye una llamada a contains de la libreria de etiquetas de jstl functions http://download.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fn/contains.fn.html
Igualmente debemos incluir el import de la libreria en el jsp
<code html>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>


<SELECT NAME="materialesIds" MULTIPLE SIZE=5>
<c:forEach items="${requestScope.materiales}" var="material">
<OPTION value="${material.id}"
${fn:contains(requestScope.idsMaterialesActuales, material.id)? 'selected' : ''}>
${material.nombre} </OPTION>
</c:forEach>
</SELECT>


¿Cómo se recuperan los selects many desde el request?


String[] idsMaterial= request.getParameterValues("materialesIds");
// esta función es un atajo de la anterior para obtener solo el primer valor del parametro
// String value=getParameter(String clave) ;

for(String id:idsMaterial){
Syso("idMaterial Seleccionado: "+id);
}

No hay comentarios:

Publicar un comentario