dudas sobre formularios

aralogo
23 de Abril del 2004
Hola!
Mis dudas sin bastante basicas creo:
-Como hago para mantener los datos de los campos al pasar a otra pag jsp desde una primera tambien en jsp
- La otra, si se puede hacer una dependencia dinamica de dos combos son usar jsp, me explico, en un 1º salen unos grupos de material a los q denomino familias y en el 2º los materiales de estas, esto me funciona perfectamente pero usando javaScript aunq me pasa lo de q no me guarda el dato de las unidades solicitadas (la 1º duda) :P.
Gracias por vuestra ayuda de antemano

Marco
23 de Abril del 2004
Hola!! Espero que esta breve informacion te sirva:
1.- Para guardar los valores entre llamadas, almacenarlos en javaBeans y usando el tag <jsp:useBean> si las llamadas se hacen entre JSP.

2.- Si quieres hacer la relacion maestro-detalle en un combo box o en selection list, sin que la pagina se refresque, debes de utilizar javascript como dices, o al menos yo no conozco una forma de hacerlo directamente sin hacer un request al server.

Te anexo unos ejemplos que espero te sirvan:
<<datos.jsp>>
<jsp:useBean id="datosadic" scope="session" class="pruebas.datosadicBean" />
<jsp:setProperty name="datosadic" property="*" />
<jsp:useBean id="datos" scope="session" class="pruebas.datosBean" />
<jsp:setProperty name="datos" property="*" />
<head>
<title></title>
</head>
<body>
<form method="POST" action="/datosadic.jsp">
<table border="1" width="75%">
<tr>
<td width="25%">Nombre:</td>
<td width="25%"><input type="text" name="txtNombre" size="20" value="<%=datos.getTxtNombre()%>"></td>
<td width="25%">Edad:</td>
<td width="25%"><input type="text" name="txtedad" size="2" value="<%=datos.getTxtedad()%>"></td>
</tr>
<tr>
<td width="25%">Domicilio</td>
<td width="75%" colspan="3"><input type="text" name="txtDomicilio" size="60" value="<%=datos.getTxtDomicilio()%>"></td>
</tr>
<tr>
<td width="25%">Sexo:</td>
<td width="25%">
<input type="radio" value="1" name="rdsSexo" <%=datos.getRdsSexo().equals("1")?"checked":""%>>Hombre
<input type="radio" value "0" name="rdsSexo" <%=datos.getRdsSexo().equals("0")?"checked":""%>>Mujer
</td>
<td width="25%">Pais:</td>
<td width="25%"><select size="1" name="cbxPais">
<option value="1" <%=datos.getCbxPais().equals("1")?"selected":""%>>Argentina</option>
<option value="2" <%=datos.getCbxPais().equals("2")?"selected":""%>>Brasil</option>
<option value="3" <%=datos.getCbxPais().equals("3")?"selected":""%>>España</option>
<option value="4" <%=datos.getCbxPais().equals("4")?"selected":""%>>Mexico</option>
</select></td>
</tr>
<tr>
<td width="25%"></td>
<td width="25%"></td>
<td width="25%">Provincia/Estado:</td>
<td width="25%"><%=datosadic.getCbxEstado()%></td>
</tr>
<tr>
<td width="25%">Observaciones:</td>
<td width="75%" colspan="3">
<textarea rows="2" name="txtObservaciones" cols="50"><%=datosadic.getTxtObservaciones()%></textarea>
</td>
</tr>
</table>
<p><input type="submit" value="Enviar" name="btnEnviar"><input type="reset" value="Restablecer" name="btnReset"></p>
</form>
</body>

<<datosBean.jsp>>
package pruebas;

public class datosBean {
private String cbxPais;
private String rdsSexo;
private String txtDomicilio;
private String txtNombre;
private String txtedad;

public datosBean() {
this.reset();
}
public void setCbxPais(String cbxPais) {
this.cbxPais = (cbxPais==null?"4":cbxPais);
}
public String getCbxPais() {
return cbxPais;
}
public void setRdsSexo(String rdsSexo) {
this.rdsSexo = rdsSexo==null?"1":rdsSexo;
}
public String getRdsSexo() {
return rdsSexo;
}
public void setTxtDomicilio(String txtDomicilio) {
this.txtDomicilio = txtDomicilio==null?"":txtDomicilio;
}
public String getTxtDomicilio() {
return txtDomicilio;
}
public void setTxtNombre(String txtNombre) {
this.txtNombre = txtNombre==null?"":txtNombre;
}
public String getTxtNombre() {
return txtNombre;
}
public void setTxtedad(String txtedad) {
this.txtedad = txtedad==null?"0":txtedad;
}
public String getTxtedad() {
return txtedad;
}
public void reset() {
// valores default
cbxPais="4";
rdsSexo="1";
txtDomicilio="";
txtNombre="";
txtedad="0";
}
}

<<continua en otro mensaje>>


Marco
23 de Abril del 2004
<<datosadic.jsp>>
------------------
<%@ page import="java.util.*"%>
<jsp:useBean id="datosadic" scope="session" class="pruebas.datosadicBean" />
<jsp:setProperty name="datosadic" property="*" />
<jsp:useBean id="datos" scope="session" class="pruebas.datosBean" />
<jsp:setProperty name="datos" property="*" />
<html>
<head>
<title>Datos Adicioanles</title>
</head>
<body>
<form method="POST" action="/datos.jsp">
<table border="0" width="75%">
<tr>
<td width="25%">Nombre recibido:</td>
<td width="25%"><%=datos.getTxtNombre()%></td>
<td width="25%">Edad:<%=datos.getTxtedad()%></td>
<td width="25%">sexo:<%=datos.getRdsSexo().equals("1")?"Hombre":"Mujer"%></td>
</tr>
<tr>
<td width="25%">Pais:</td>
<td width="25%"><%=datos.getCbxPais()%></td>
<td width="25%">Provincia/Estado:</td>
<td width="25%"><select size="1" name="cbxEstado">
<%
List aAux=datosadic.getLstEstados(datos.getCbxPais());
if(aAux!=null){
for(int i=0;i<aAux.size();i++) {
out.println("<option value=""+ aAux.get(i++) +"">"+ aAux.get(i) + "</option>");
}
}
%>
</select></td>
</tr>
<tr>
<td width="25%">Observaciones</td>
<td width="75%" colspan="3"><textarea rows="2" name="txtObservaciones" cols="50"><%=datosadic.getTxtObservaciones()%></textarea></td>
</tr>
<tr>
<td width="25%"><input type="submit" value="Enviar" name="B1"><input type="reset" value="Restablecer" name="B2"></td>
<td width="25%"></td>
<td width="25%"></td>
<td width="25%"></td>
</tr>
</table>
</form>
</body>
</html>

<<datosadicBean.java>>
----------
package pruebas;
import java.util.*;

public class datosadicBean{
private String cbxEstado;
private String txtObservaciones;
private List lstEstados;
private List lstEdosArg;
private List lstEdosBra;
private List lstEdosEsp;
private List lstEdosMex;

public datosadicBean(){
this.reset();
}
public void setCbxEstado(String cbxEstado) {
this.cbxEstado = cbxEstado;
}
public String getCbxEstado() {
return cbxEstado;
}
public void setTxtObservaciones(String txtObservaciones) {
this.txtObservaciones = txtObservaciones;
}
public String getTxtObservaciones() {
return txtObservaciones;
}
public void reset() {
cbxEstado = "1";
txtObservaciones = "";
lstEdosArg=new ArrayList();
lstEdosBra=new ArrayList();
lstEdosEsp=new ArrayList();
lstEdosMex=new ArrayList();

// Inicializamos los estados
lstEdosArg.add("1");
lstEdosArg.add("Buenos Aires");
lstEdosArg.add("2");
lstEdosArg.add("Cordoba");

lstEdosBra.add("1");
lstEdosBra.add("Brasilia");
lstEdosBra.add("2");
lstEdosBra.add("Rio de Janeiro");

lstEdosEsp.add("1");
lstEdosEsp.add("Madrid");
lstEdosEsp.add("2");
lstEdosEsp.add("Barcelona");

lstEdosMex.add("1");
lstEdosMex.add("Ciudad de Mexico");
lstEdosMex.add("2");
lstEdosMex.add("Guadalajara");
lstEdosMex.add("3");
lstEdosMex.add("Monterrey");
}

public List getLstEstados(String pais) {
if(pais.equals("1")){
lstEstados=lstEdosArg;
}
else if(pais.equals("2")) {
lstEstados=lstEdosBra;
}
else if(pais.equals("3")) {
lstEstados=lstEdosEsp;
}
else {
lstEstados=lstEdosMex;
}
return lstEstados;
}
public void setLstEstados(List lstEstados) {
this.lstEstados = lstEstados;
}
}

Marco
23 de Abril del 2004
Explicacion:

Se definen 2 paginas:

datos.jsp y datosadic.jsp

Cada una tiene asociado un Bean: datosBean.java y datosadicBean.jsp.

Cada uno de estos Beans, tiene una variable por cada campo del formulario (con el nombre EXACTAMENTE IGUAL a como esta definido en el formulario de cada pagina).

Con el tag <jsp:useBean> se recuperan automaticamente los valores de del request al momento de enviar la informacion con el metodo POSt de cada formulario.

Asi pues, lo unico que hacemos es mostrar dichos valores en la pagina.

En el caso de datosadicBean.jsp. usamos unas listas para simular el proceso de Maestro-Detalle de Pais-Estado, mostrando en el combo de estado aquellas poblaciones que correspondan al pais.
esto es muy burdo, pero sirve para ilustrar el ejemplo, en un ambiente real se deberian usar llamadas a bases de datos.

El campo "txtObservaciones" es comun en ambas paginas, y es editable. Si lo cambias en una pagina, cuando pases a la siguiente se refleja automaticamente el cambio.

Espero que te sirva.
Saludos!!

Marco.

aralogo
23 de Abril del 2004
Muchas gracias marco, ahora mismo me pongo con ello, disculpa haber tardado tanto en responder pero tuve un problemilla de "bichos" en le ordenador.
Muchas gracias de nuevo

marco
23 de Abril del 2004
No hay de que. Cualquier duda me avisas y con gusto la hago mas grande. :D
Saludos!