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
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