Mostrar cosas distintas en campo text según select

Aquí estoy otra vez con otra duda!
Tengo un formulario que va a permitir a un usuario crear, abrir y eliminar carteras con 4
campos:
* Identificador de cartera: campo select que muestra "Nueva cartera" por defecto y una
lista de todas las carteras que posee el usuario
* Identificador nueva cartera: campo text sólo activado si el anterior está establecido en
"Nueva cartera". En caso contrario está desactivado
* Entidad gestora: campo text siempre activado cuyo valor depende del primer campo, estando vacío con "Nueva cartera", o conteniendo la entidad gestora que corresponde a la cartera seleccionada. En este último caso permito modificarla también. Realmente representa la entidad gestora que gestiona cada cartera.
* Abrir cartera / Borrar cartera: campo tipo radio donde "Borrar cartera" estará desactivado
con "Nueva cartera"
Explicada la situación, todo esto es dinámico usando javascript, lo cual consigo con el siguiente código excepto una cosa:
function habilitarCamposAdmonCarteras() {
   if (document.admonCarterasForm.idCart.value == "nuevCart") {
      document.admonCarterasForm.idNuevCart.disabled = false;
      document.admonCarterasForm.operacCart[1].disabled = true;
      document.admonCarterasForm.entGest.value = "";
   } else {
      document.admonCarterasForm.idNuevCart.disabled = true;
      document.admonCarterasForm.operacCart[1].disabled = false;
      document.admonCarterasForm.entGest.value = ¿?;
   }
}
El formulario en cuestión se llama "admonCarterasForm", y el aspecto en el que necesito
ayuda en donde figura "¿?"
Para cargar la lista de las carteras que posee el usuario en el select, tengo este código:
<html:select property="idCart" onchange="javascript:habilitarCamposAdmonCarteras();" value="nuevCart">
   <html:option value="nuevCart">Nueva cartera</html:option>                           
   <html:optionsCollection name="usuarioContainer" property="cartGlob.carteras" value="idCartera" label="idCartera"/>
</html:select>
Como puede verse, tengo un bean guardado en la sesión del usuario llamado "usuarioContainer", el cual posee un objeto llamado "cartGlob", y éste a su vez tiene almacenado una lista con todas las carteras del usuario llamada "carteras". Cada uno de los elementos de esta lista es otro bean (que representa cada Cartera individual) con el que, a través de "idCartera" obtengo el nombre de la cartera, y a través de "entGest" obtendría el nombre de la entidad gestora.
¿Cómo consigo, teniendo en cuenta este almacenamiento, que el nombre de la entidad gestora cambie dinámicamente al modificar en el campo select del formulario el identificador de cartera?
1

1 Respuesta

28.375 pts. Mi nombre es Fernando Rosado (o el guevonaso por estos...
Eso es un problema de javascript, no de java, pero a ver si solucionamos también.
En el select que se genera pondrás un "onchange" o algo similar para que se active el evento de cambiar los campos ¿verdad?.
Esta función debe de hacer algo como :
<select ... onchange="cambiaTexto(this);">  ...
se suele trabajar asi :  
 function cambiaTexto (seleccion) {
 var selected = seleccion.selectedIndex;
 var opcion = seleccion.options[selected];
 alert ("opcion " + opcion.value+ " texto "  + opcion.text);
}
Hola! Por fin se puede responder!
Creo que no me expliqué bien. Yo no quiero mostrar en el campo texto lo mismo que en el campo select, sino algo que depende del valor de ese select.
El campo select me muestra una lista de todas las carteras que posee el usuario, y por defecto la opción de "Nueva cartera". De esta manera el usuario puede crear una nueva cartera o abrir una existente. Cada cartera está gestionada por una entidad gestora, y en función de la cartera seleccionada en el select, esa entidad gestora será una u otra.Si se selecciona "Nueva cartera", el campo texto para la entidad gestora se muestra vacío y hay que rellenarlo. Si se selecciona una cartera concreta, el campo texto muestra la entidad gestora de esa cartera, pudiendo modificarse. Mi problema está en que no sé cómo cargar la entidad gestora que corresponda en el campo de texto.
Para cargar la lista de carteras en el select, con cuyo código me ayudaste tú, tengo:
Nueva cartera
"cartGlob.carteras" es una lista de Carteras, dentro del bean "usuarioContainer", y cada Cartera tiene unos atributos. Uno de ellos es "idCartera", obtenido en el código del select, y otro es "entGest", que corresponde a la entidad gestora de esa cartera.
Yo lo que no sé hacer es acceder al bean en javascript para obtener esos valores de entidades gestoras. Dentro del código que se ejecuta en el evento "onChange" del select, necesito encontrar la forma de darle valor a la entidad gestora, es decir,
"document.admonCarterasForm.entGest.value = ¿?;",
donde ¿? sería el acceso al mismo bean del campo select pero a otro atributo.
Espero haberme explicado bien, y un saludo
Perdona que no te haya podido contestar antes, es el malditor editor nuevo que me está dando problemas.
No consigo entender que es lo que quieres, si quieres escribir un dato de un bean solo tienes que usar el scriptles o "EL" adecuado, esto te genera la cadena de texto que quieres y luego con javascript ejecutarlo... eso es así siempre.
JSP:
.... onchange="cambia('');" ....
Lo que me estoy liando es que tiene que ver el java con lo que tienes que hacer con javascript.
Intenta resolver tu problema usando html escrito a mano y javascript, una vez arreglado eso, solo intenta que tu JSP genere un html válido.
Lamento no poder ayudarte más.
Hola!
Si no me equivoco, mi problema se reduce a cómo acceder en javascript a un bean que está en sesión, que es dónde están almacenados los datos que necesito y que determinan qué mostrar en el campo text
Javascript solo tiene acceso al documento HTML generado. Como mucho, usando AJAX puedes acceder a un documento generado en otra url, que suele ser un XML en lugar de un html y puedes recorrerlo para recuperar datos.
Un posible solución es que construyas una función o array javascript que te da los valores posibles en el jsp :
var valores = new Array();
// Esto lo construyes en el JSP iterando
// sobre los objetos en la sesion
valores[0][0]="cero de cero";
valores[0][1]="uno de cero";
valores[0][2]="dos de cero";
valores[1][0]="cero de uno";
valores[1][1]="uno de uno";
valores[1][2]="dos de uno";
// y luego en el "onchange", tomas los valores del array.
function fn (seleccionado) {
var selected = seleccion.selectedIndex;
alert("para el "+selected+" tengo " + [selected][0]);
alert("para el "+selected+" tengo " + [selected][1]);
alert("para el "+selected+" tengo " + [selected][2]);
}
¿Me explico?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas