Foros del Web » Programación para mayores de 30 ;) » Java »

duda con struts ???

Estas en el tema de duda con struts ??? en el foro de Java en Foros del Web. buenas a todos, llevo 2 meses currando con struts y se me presenta una duda, voy a intentar describirla a ver si me podeis hechar ...
  #1 (permalink)  
Antiguo 15/03/2005, 13:07
 
Fecha de Ingreso: septiembre-2003
Ubicación: zaragoza
Mensajes: 7
Antigüedad: 20 años, 7 meses
Puntos: 0
duda con struts ???

buenas a todos, llevo 2 meses currando con struts y se me presenta una duda, voy a intentar describirla a ver si me podeis hechar un cable...

Tengo un fichero jsp en el cual aparece un form y lo recorreo con un iterate para pintar en pantalla distintos registros obtenidos de base de dtos.
Me piden que ponga un boton en cada registro en el cual al pulsar tengo que llamar a una action para hacer una consulta ssobre el registro utilizando para ello la primary key. Para poder llamar a la action debo comprobar antes que 4 campso estan rellenados, esto lo hago con javascript, el problema es que no se como cojer dichos campos....

Supongamos que tengo 3 registros y las siguientes columnas y la cara del moñaco es el boton de busqueda en el cual al pulsar hare una consulta a base de datos para el registro concreto.

norden cosecha poligono parcela recinto
0 2005 1 1 2
1 2005 1 2 2
2 2005 2 1 3


Cuando trabajaba sin struts a la hora de pintar con html los inputs les ponia en el name lo siguiente <input type=text name='cosecha_<%=cont%>'
de tal manera que en la funcion javascript hacia lo siguiente cuando la llamaba <a href='javascript:buscarDatos('<%=cont%>')' ....... en cada registro, y asi lo captaba el valor para pasarlo al otro jsp...

function buscarDatos(cont){
var cosecha= eval("document.form.cosecha_"+cont+".value") ;
........................
}

Pues mi duda surje ahora con struts, ya que al tener los registros dentro de un form y recorrerlo con un iterate, pues no se como cojer uno en concreto, este es el codigo que tengo:

<logic:iterate id="expedienteForm" name="parcelas" type="java.util.Hashtable" scope="request" indexId="indice">

<td><html:text name="expedienteForm" property="provi" maxlength="2" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="muni" maxlength="3" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="agregado" maxlength="3" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="zona" maxlength="2" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="poligono" maxlength="3" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="parcela" maxlength="5" onkeypress="return soloNumero(this,event)" styleClass="textarea40c" /></td>
<td><html:text name="expedienteForm" property="recinto" maxlength="4" onkeypress="return

<td> <a href='javascript:buscarActuales(<%=indice.intValue ()%>)'><html:img imageName="actuales" srcKey="src.motivo" border="0" height="18" altKey="alt.actuales" /></a></td>

</logic:iterate>


Perdon por el tocho, espero que me sirva de algo..... Un saludo
  #2 (permalink)  
Antiguo 15/03/2005, 14:08
Avatar de lic_dahool  
Fecha de Ingreso: noviembre-2003
Mensajes: 418
Antigüedad: 20 años, 6 meses
Puntos: 0
A ver si te he entendido bien, a mi se me ocurre por ejemplo, que al presionar el boton este te envie a un Action que evalúa el boton que presionó, luego obtienes según el boton el dato necesario de un HashTable o un ArrayList el cual cargaste para generar la lista que se muestra en pantalla, o puedes hacer que el boton ejecute un javascript que reciba como parámetro un indice que luego se lo envías al Action.

Saludos.
__________________
La cantidad total de inteligencia del planeta permanece constante.
La población, sin embargo, sigue aumentando.

COLE


:cool: Los ordenadores no resuelven problemas ... ejecutan soluciones.
Laurent Gasser


Tienes alguna duda :pensando: ? >>> www.google.com :aplauso: <<<
  #3 (permalink)  
Antiguo 16/03/2005, 03:04
 
Fecha de Ingreso: septiembre-2003
Ubicación: zaragoza
Mensajes: 7
Antigüedad: 20 años, 7 meses
Puntos: 0
Cita:
Iniciado por lic_dahool
A ver si te he entendido bien, a mi se me ocurre por ejemplo, que al presionar el boton este te envie a un Action que evalúa el boton que presionó, luego obtienes según el boton el dato necesario de un HashTable o un ArrayList el cual cargaste para generar la lista que se muestra en pantalla, o puedes hacer que el boton ejecute un javascript que reciba como parámetro un indice que luego se lo envías al Action.

Saludos.

Buenos dias, gracias por contestar lo primero...

Lo último que me comentas ya lo habia barajado, pero tengo el problema de que en la action realizo una consulta a la base de datos con parámetros que ya me han introducido en pantalla, esta consulta se muestra en una opennamedwindow, en caso de que un campo este nulo esta consulta fallara, a mi me interesa conseguir los valores con javascript para en caso de que haya uno nulo sacar un alert, pero no lo consigo, me comentaro que una forma era poner el atributo indexed="true" en el html:text y lueg en javvascript el campo pasaba a ser id[norden]porpertyName pero asi no me funciona......
  #4 (permalink)  
Antiguo 16/03/2005, 08:51
 
Fecha de Ingreso: febrero-2004
Ubicación: andorra
Mensajes: 406
Antigüedad: 20 años, 2 meses
Puntos: 1
lo que puedes hacer es en cada boton poner :
<a href="action_a_enviar ?id=<bean:write name="id_iterate que la hayas puesto al iterate" property="la id que quieres pasar (nombre que recuperas)" />">

espero que te sirva

Un saludo

Fran
__________________
vuestro amigo franju
  #5 (permalink)  
Antiguo 16/03/2005, 16:05
 
Fecha de Ingreso: septiembre-2003
Mensajes: 47
Antigüedad: 20 años, 7 meses
Puntos: 0
utiliza el VALIDATION de STRUTS

dices que trabajas en STRUTS... bien si te has dado cuenta, cuando se crea un formulario en una pagina JSP, se debe crear una clase ACTIONFORM que captura los datos que introduces en el formulario cuando lo envias.

ahora bien, en STRUTS existe una forma de validar dichos datos antes de ejecutar la acción que debe ejecutarse al enviar el formulario.

puedes, en la clase ACTIONFORM validar si los datos que tiene el formulario del JSP son validos, si lo son haces la consulta a la DB, sino devuelves un mensaje en la pagina JSP, donde le digas al usuario que debe rellenar todos los campos.

la configuracion para decirle a STRUTS que tal o cual formulario lo debe validar antes de ejecutar la accion, debe ir en el STRUTS_CONFIG.XML, allí mismo donde defines los <ACTION_MAPPINGS>

mira este ejemplo

<action-mappings>
.
.
.
<action path="/login"
type="co.edu.uco.action.LoginAction"
name="loginForm"
scope="request"

validate="true"

input="/jsp/login.jsp">
<forward name="bien" path="/jsp/maestroFormatos.jsp" redirect="false" />

<forward name="mal" path="/jsp/login.jsp" redirect="false" />
</action>

.
.
.
<action-mappings>


es solo un ejemplo de como se configura en el STRUTS - CONFIG una pagina LOGIN.JSP para que sea reconocida por una clase java llamada LOGINFORM

ahora el codigo de la validacion es el siguiente, este metodo va dentro del ACTIONFORM en este caso LOGINFORM

public ActionErrors validate( ActionMapping mapping, HttpServletRequest request ) {
ActionErrors errors = new ActionErrors();
if (getUsuario() == null || getUsuario().equals("")) {
errors.add("Usuario",new ActionError("error.usuario.requerido"));
}
if (getPassword() == null || getPassword().equals("")) {
errors.add("Usuario",new ActionError("error.contrasena.requerida"));
}
if ( getIdentificacion() == null || getIdentificacion().equals("")) {
errors.add("Identificacion",new ActionError("error.identificacion.requerida"));
}else{
try {
Double.parseDouble(getIdentificacion());
} catch( NumberFormatException ne ) {
errors.add("Identificacion",new ActionError("error.identificacion.numerica"));
}
}
return errors;
}



y para mostrar los errores en la pagina JSP utilizas el siguiente codigo dentro de tu pagina JSP (antes crear el formulario)

<logic:messagesPresent>
<span id="errorsHeader"><bean:message key="errors.encabezado.validacion"/></span>
<html:messages id="error">
<li><c:out value="${error}"/></li>
</html:messages>
<hr>
</logic:messagesPresent>


esto debes analizarlo bien porque lo he sacado de un aplicación mia, y no me he detenido a mirar que variables debo cambiar para que lo entiendas....

pero puedes investigar, como te digo VALIDATION en struts

espero que toda esta retaila te pueda ayudar a solucionar el prblema
  #6 (permalink)  
Antiguo 17/03/2005, 02:38
 
Fecha de Ingreso: septiembre-2003
Ubicación: zaragoza
Mensajes: 7
Antigüedad: 20 años, 7 meses
Puntos: 0
Cita:
Iniciado por milsoncardona
dices que trabajas en STRUTS... bien si te has dado cuenta, cuando se crea un formulario en una pagina JSP, se debe crear una clase ACTIONFORM que captura los datos que introduces en el formulario cuando lo envias.

ahora bien, en STRUTS existe una forma de validar dichos datos antes de ejecutar la acción que debe ejecutarse al enviar el formulario.

puedes, en la clase ACTIONFORM validar si los datos que tiene el formulario del JSP son validos, si lo son haces la consulta a la DB, sino devuelves un mensaje en la pagina JSP, donde le digas al usuario que debe rellenar todos los campos.

la configuracion para decirle a STRUTS que tal o cual formulario lo debe validar antes de ejecutar la accion, debe ir en el STRUTS_CONFIG.XML, allí mismo donde defines los <ACTION_MAPPINGS>

mira este ejemplo

<action-mappings>
.
.
.
<action path="/login"
type="co.edu.uco.action.LoginAction"
name="loginForm"
scope="request"

validate="true"

input="/jsp/login.jsp">
<forward name="bien" path="/jsp/maestroFormatos.jsp" redirect="false" />

<forward name="mal" path="/jsp/login.jsp" redirect="false" />
</action>

.
.
.
<action-mappings>


es solo un ejemplo de como se configura en el STRUTS - CONFIG una pagina LOGIN.JSP para que sea reconocida por una clase java llamada LOGINFORM

ahora el codigo de la validacion es el siguiente, este metodo va dentro del ACTIONFORM en este caso LOGINFORM

public ActionErrors validate( ActionMapping mapping, HttpServletRequest request ) {
ActionErrors errors = new ActionErrors();
if (getUsuario() == null || getUsuario().equals("")) {
errors.add("Usuario",new ActionError("error.usuario.requerido"));
}
if (getPassword() == null || getPassword().equals("")) {
errors.add("Usuario",new ActionError("error.contrasena.requerida"));
}
if ( getIdentificacion() == null || getIdentificacion().equals("")) {
errors.add("Identificacion",new ActionError("error.identificacion.requerida"));
}else{
try {
Double.parseDouble(getIdentificacion());
} catch( NumberFormatException ne ) {
errors.add("Identificacion",new ActionError("error.identificacion.numerica"));
}
}
return errors;
}



y para mostrar los errores en la pagina JSP utilizas el siguiente codigo dentro de tu pagina JSP (antes crear el formulario)

<logic:messagesPresent>
<span id="errorsHeader"><bean:message key="errors.encabezado.validacion"/></span>
<html:messages id="error">
<li><c:out value="${error}"/></li>
</html:messages>
<hr>
</logic:messagesPresent>


esto debes analizarlo bien porque lo he sacado de un aplicación mia, y no me he detenido a mirar que variables debo cambiar para que lo entiendas....

pero puedes investigar, como te digo VALIDATION en struts

espero que toda esta retaila te pueda ayudar a solucionar el prblema

Buenos dias, en primer lugar gracias por contestar....

Eso que me comentas en la aplicación ya esta implementado, tenemos unas cuantas paginas de error y una clase que controla todo tipo de errores, la cual es llamada en los catch de los metodos que utilizamos...

El problema que tengo yo es que no se como controlar unos valores con javascript cuando los registros estan en un iterate, cuando trabajaba sin struts me creaba un contador y en el name del input lo añadia:
<input ype=text name='cosecha_<%=cont%>' ...>

de tal manera que en la función javascript pasaba el cont y asi me podia hacer con el value y ostrar un alert en caso de ser necesario...

En este caso me ocurre lo mismo, al ser un formulario grande y pulsar un boton se debe abrir una ventana tipo popup y aparecer una serie de valores que se obtienen de la base de datos a traves de otros 5 campos que son la PKey, lo que no quiero es abrir la ventana para mostrar un error, simplemente controlar con javascript si los 5 campos que son Pkey están rellenados y entonces hacer la consulta......


No se si me explico bien, el problema es que no se referenciarme a un html:text con javascriopt, he leido por ahi que poniendo la propiedad indexed a true el input pasa a llamarse de la siguiente manera :
id[norden]propertyName , pero esto no me funciona.......
  #7 (permalink)  
Antiguo 17/03/2005, 08:24
 
Fecha de Ingreso: febrero-2004
Ubicación: andorra
Mensajes: 406
Antigüedad: 20 años, 2 meses
Puntos: 1
para trabajar con una jsp normal o con tag de los struts es lo mismo y si no has la prueba , quando ejecutes la pagina echale un ojo al codigo fuente.

Para el javascrit no cambia lo unico que tienes que recordar que el name del objecto es el attributo property :

por ejemplo :

si tienes un textbox1 i queres pasarle el valor de este textbox1 a textbox2 :

Código:
textbox1 :

<bean:html property="objecto1" onchange="copiar(this.form.objecto1,this.form.objeto2);"/> 

textbox2 :

<bean:html property="objecto2" />

javascript:

function copiar(numero1,numero2){
numero2.value = numero1
}
espero que te haya sido de ayuda y si no dimelo

un saludo fran
__________________
vuestro amigo franju
  #8 (permalink)  
Antiguo 22/03/2005, 06:25
 
Fecha de Ingreso: marzo-2005
Mensajes: 1
Antigüedad: 19 años, 1 mes
Puntos: 0
pq no pruebas con esto...

<input type="text" maxlength="3" size="3" name="qty_<bean:write name="carritoProducto" property="id"/>" value="<bean:write name="carritoProducto" property="quantity"/>">

Esto lo uso yo en una web qye permite comprar y añadir cosas a modo de carrito de la compra.
Solo debes substituir los names, properties y demás para que hagan referencia a tus beans!

Suerte
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:48.