Bueno, este mensaje es sólo para decir que ya he conseguido hacerlo y que se puede cerrar ya el tema. Pongo la solución por si a alguien le hiciese falta aunque al final lo he hecho con multiple en vez de como quería hacerlo al principio.
Esto sería el select. Lo único que cambio es que pongo multiple al final, el nombre lo he puesto simple y el hidden lo he sacado del select.
Código HTML:
<tr>
<td><button onclick="location.href='RedirectServlet?url=/nuevos/nuevoCliente.jsp'">Nuevo</button>Cliente</td>
<%int j=1; %>
<td id="container">
<select name="seleccionarCliente" size="5" id="select" onchange="javaScript:clone(this)" multiple>
<c:forEach var="x" items="${requestScope.clienteak}">
<option value="${x.idcliente}" name="${x.idcliente}" selected>${x.descCliente}</option>
</c:forEach>
</select>
<input type="hidden" name="j" id="j" value="<%=j %>">
</td>
</tr>
Esto es el código de javaScript en donde lo único que hago es sumarle una unidad a j cuando elige una opción distinta:
Código HTML:
<script language="JavaScript" type="text/javascript">
function clone(sel){
document.getElementById ("j").value = parseInt(document.getElementById ("j").value) + 1;
}
</script>
Finalmente, esto sería el código del JavaServlet:
Código:
int j=Integer.parseInt(req.getParameter("j")==null?"50":req.getParameter("j"));
int[] idcliente=new int[j];
for(int i=0;i<j-1;i++){
idcliente[i]=Integer.parseInt((String) (req.getParameterValues("seleccionarCliente")[i]==null?"1":req.getParameterValues("seleccionarCliente")[i]));
}
Averiguar lo de poner [i] después del getParameterValues no sé ni cómo me ha dado por hacerlo. Lo ví un día de casualidad y me he acordado. Por lo menos funciona, y espero que no me obliguen a hacerlo de la otra manera (con el cloneNode).