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

Preguntas sobre struts 1.3.8

Estas en el tema de Preguntas sobre struts 1.3.8 en el foro de Java en Foros del Web. Buenas! Tengo un par de preguntas que espero me podáis resolver. 1. Usando el Validator este que viene con Struts, y usando un DynaValidatorForm, cuando ...
  #1 (permalink)  
Antiguo 03/08/2008, 14:43
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
Preguntas sobre struts 1.3.8

Buenas! Tengo un par de preguntas que espero me podáis resolver.

1. Usando el Validator este que viene con Struts, y usando un DynaValidatorForm, cuando llego al action, como recupero los datos a partir del parámetro form? ¿Hay que hacer un casting o algo así? De hacerse un casting, como se catea eso?

2. He intentado usar los tags de struts para, por ejemplo, los <input type=text... Pues bien, me decía que según la DTD el campo property es obligatorio. Y cuando ejecuto me dice que no existe esa property. ¿Cómo se usan? Supongo que tendrá algo que ver con ese DynaValidatorForm, pero, en teoría, si es la primera vez que se ejecuta el formulario, hasta que no se le da a submit no se crea el formbean donde se cargan los datos, no?

3. ¿Alguien sabe donde puedo encontrar un manual en español para usar los validator estos de struts? ME lio un poco y todavía no sé para que sirve la tag var dentro de la etiqueta field.

Muchas gracias por todo.

Un saludo.
  #2 (permalink)  
Antiguo 04/08/2008, 08:22
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Preguntas sobre struts 1.3.8

Hola,

1. Para recuperar tus datos de la forma en el Action debes de hacer esto:

String nombre=

2. Cuando utilizas los tags de struts, antes de que se cargue la jsp Struts verifica primero que exista un tag "action" en el struts-config.xml que tenga como path el mismo valor que tiene el atributo "action" de tu tag "form" del jsp, me explico??

Ejemplo:
Tienes tu jsp con un "form" de la siguiente manera:
<html:form action="miAction.do">
<html:text property="nombrePersona" />
</html:form>

Y en el struts-config-xml debes de tener algo asi:
<action path="miAction" ............ />

Ya que Struts valido esto, toma todos los campos que tienes en tu jsp y los compara con tu ActionForm que tienes declarado en tu struts-config.xml y esta clase debe de tener al menos los mismos campos que tienes en tu jsp con el mismo nombre

public class Persona extends ActionForm {
private String nombrePersona; //esta esta en tu jsp como <html:text
}

En tu caso, creo que no estas utilizando ActionForm sino DynaActionForm (no te recomiendo que utlizes eso, hasta la documentacion lo dice) pero si decides usarlo en tu struts-config.xml debes de tener algo asi:
<form-bean name="formaDinamica" type="org.apache.struts.action.DynaActionForm">
<form-property name="nombrePersona" type="java.lang.String"/>
//aqui agregas todos los campos que vayas a mandar desde el jsp al Action
</form-bean>

Y en tu clase Action lo cacharias asi:

DynaActionForm misDatos=(DynaActionForm)form;
String nombre=String.valueOf(misDatos.get("nombrePersona" ));

Espero te haya ayudado, cualquier cosa aqui estamos.

saludos!
  #3 (permalink)  
Antiguo 04/08/2008, 09:08
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Preguntas sobre struts 1.3.8

Cita:
Iniciado por Bunburyscom Ver Mensaje
Hola,

1. Para recuperar tus datos de la forma en el Action debes de hacer esto:

String nombre=

2. Cuando utilizas los tags de struts, antes de que se cargue la jsp Struts verifica primero que exista un tag "action" en el struts-config.xml que tenga como path el mismo valor que tiene el atributo "action" de tu tag "form" del jsp, me explico??

Ejemplo:
Tienes tu jsp con un "form" de la siguiente manera:
<html:form action="miAction.do">
<html:text property="nombrePersona" />
</html:form>

Y en el struts-config-xml debes de tener algo asi:
<action path="miAction" ............ />

Ya que Struts valido esto, toma todos los campos que tienes en tu jsp y los compara con tu ActionForm que tienes declarado en tu struts-config.xml y esta clase debe de tener al menos los mismos campos que tienes en tu jsp con el mismo nombre

public class Persona extends ActionForm {
private String nombrePersona; //esta esta en tu jsp como <html:text
}

En tu caso, creo que no estas utilizando ActionForm sino DynaActionForm (no te recomiendo que utlizes eso, hasta la documentacion lo dice) pero si decides usarlo en tu struts-config.xml debes de tener algo asi:
<form-bean name="formaDinamica" type="org.apache.struts.action.DynaActionForm">
<form-property name="nombrePersona" type="java.lang.String"/>
//aqui agregas todos los campos que vayas a mandar desde el jsp al Action
</form-bean>

Y en tu clase Action lo cacharias asi:

DynaActionForm misDatos=(DynaActionForm)form;
String nombre=String.valueOf(misDatos.get("nombrePersona" ));

Espero te haya ayudado, cualquier cosa aqui estamos.

saludos!

muchísimas gracias! claro que me has ayudado un montón. Por cierto, porqué no es aconsejable usar DynaValidatorForm?

En caso de usar el DynaValidartorForm, en teoría lo de las property de los html:text funciona igual no?

Muchas gracias!

Saludos
  #4 (permalink)  
Antiguo 04/08/2008, 10:38
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Preguntas sobre struts 1.3.8

Mira lo que dice la documentacion:

DynaActionForms are meant as an easy solution to a common problem: Your ActionForms use simple properties and standard validations, and you just pass these properties over to another JavaBean (say using BeanUtils.copyProperties(myBusinessBean,form)).

DynaActionForms are not a drop-in replacement for ActionForms. If you need to access DynaActionForm properties in your Action, you will need to use the map-style accessor, like myForm.get("name"). If you actively use the ActionForm object in your Action, then you may want to use conventional ActionForms instead.

DynaActionForms cannot be instantiated using a no-argument constructor. In order to simulate the extra properties, there is a lot of machinery involved in their construction. You must rely on the framework to instantiate a DynaActionForm for you, via the ActionMapping.

If need be, you can extend the DynaActionForm to add custom validate and reset methods you might need. Simply specify your subclass in the struts-config instead. However, you cannot mix conventional properties and DynaProperties. A conventional getter or setter on a DynaActionForm won't be found by the reflection utilities.

To use DynaActionForms with the Struts Validator, specify org.apache.struts.validator.ValidatorActionForm (or your subclass) as the form-bean class.

And, of course, while the DynaActionForm may support various binary types, properties used with the html:text tag should still be String properties.


Por otro lado, los DynaActionForm no los programas, solo los declaras en el xml, por esto, en caso de que tuvieras algun error, éste saldria a la hora de ejecucion de tu sistema.

Ademas, por cada variable que quieras recuperar tienes que hacer esto:
String nombre=String.valueOf(misDatos.get("nombrePersona" ));

Ahi tendrias un "get()" por cada variable, entonces se estaria pareciendo a un ActionForm, no???

Y cada variable declararla en el struts-config.xml, que es lo mismo si hicieras un "private String nombre;" en tu ActionForm, donde esta el DynaValidatorForm????

Tambien (sino mal recuerdo), con un DynaValidatorForm no puedes poner automaticamente valores por default en tus campos de texto, para esto necesitas usar ActionForm.

Mi humilde opinion es que utilizes un DynaValidatorForm solo para aprender un poco mas de Struts, pero en una aplicacion real y robusta, no lo uses, mejor utiliza el ActionForm o el ValidatorForm, solo es mi humilde opinion.

saludos!
  #5 (permalink)  
Antiguo 04/08/2008, 12:21
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Preguntas sobre struts 1.3.8

Hola de nuevo! Sigo teniendo el siguiente problema:

javax.servlet.jsp.JspException: Cannot find bean: "login" in any scope
at org.apache.struts.taglib.TagUtils.lookup(TagUtils. java:864)
at org.apache.struts.taglib.html.BaseFieldTag.prepare Value(BaseFieldTag.java:123)
at or

Nada más empezar la aplicación va a la pantalla de login (le digo que vaya a esa JSP en el wellcome file list). En lugar del DynaActionForm que apuntas en el post anterior uso un DynaValidatorForm, que por lo visto es el aconsejado si usas el validator de Struts. Te pongo las partes relacionadas a esto de mi struts-config.xml.

<form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorFor m">
<form-property name="login" type="java.lang.String"/>
<form-property name="password" type="java.lang.String"/>
</form-bean>


<action path="/signin" input="/WEB-INF/jsps/login/login-body.jsp" type="actions.Signin" scope="request" name="loginForm" validate="true">
<forward name="Success" path="/WEB-INF/jsps/exito.jsp"/>
<forward name="Failure" path="/WEB-INF/jsps/fallo.jsp"/>
</action>

Y ahora la jsp login.jsp:

<html:html>
<head></head>
<body>
<center>
<html:form action="signin.do" method="POST">
<logic:messagesPresent>
<html:messages id="errorMess">
<bean:write name="errorMess"/>
</html:messages>
</logic:messagesPresent>
<h3>Autenticaci&oacute;n</h3>

<table border="0" cellpadding="0" cellspacing="0" width="400">
<tr >
<td width="150" height="40" align="right" style="padding-right: 5px;"><b>Login:</b></td>
<td><html:text property="login" name="login" size="20" maxlength="20" /><br/></td>
</tr>
<tr>
<td height="40" align="right" style="padding-right: 5px;"><b>Password:</b> </td>
<td><html:password property="password" name="password" size="20" maxlength="20" /></td>
</tr>
<tr>
<td height="40" align="right"></td>
<td><input type="submit" onclick="" class="buttonred" value="Aceptar" name="submit" id="submit"/></td>
</tr>
</table>
</html:form>
</center>
</body>
</html:html>

Tengo perfectamente linkado todo, los path en el action, etc, y aún así me dice que no existe el bean. Estoy me está conduciendo a la locura.

También he probado la solución que me apuntabas en el action para recoger los valores, y nada, no funciona. A lo mejor funciona con DynaActionForm, pero no con DynaValidatorForm.

Si sigo sin solucionarlo, te haré caso y tiraré de ActionForm que parece la solución más sensata. Supongo que ActionForm o ValidationForm van perfectos con el validator de struts, no?

Muchísimas gracias por tu tiempo. Y perdona que sea tan inculto todavía en esto de struts y java.

Un saludo
  #6 (permalink)  
Antiguo 04/08/2008, 13:55
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Preguntas sobre struts 1.3.8

Hola, no es nada, para eso estamos

Dos cosas:

1. NUNCA pongas jsp en la carpeta WEB-INF!!!, en la carpeta WEB-INF va toda la configuracion de tu sistema: clases, librerias, archivos xml, etc, ésta carpeta es oculta para el usuario, lo que tienes que hacer es poner tus paginas jsp dentro de una carpeta a nivel de la aplicacion:
<TOMCAT_HOME>/webappss/tu_aplicacion/jsp/ <- aqui pon tus paginas jsp

2. A los tags <html:text quitales el atributo "name", ya que este se utiliza para otras cosas, de tal forma que te queden asi:

<html:text property="login" size="20" maxlength="20" />

Pruebalo y ahi nos avisas
  #7 (permalink)  
Antiguo 04/08/2008, 14:16
 
Fecha de Ingreso: julio-2008
Mensajes: 26
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Preguntas sobre struts 1.3.8

Cita:
Iniciado por Bunburyscom Ver Mensaje
Hola, no es nada, para eso estamos

Dos cosas:

1. NUNCA pongas jsp en la carpeta WEB-INF!!!, en la carpeta WEB-INF va toda la configuracion de tu sistema: clases, librerias, archivos xml, etc, ésta carpeta es oculta para el usuario, lo que tienes que hacer es poner tus paginas jsp dentro de una carpeta a nivel de la aplicacion:
<TOMCAT_HOME>/webappss/tu_aplicacion/jsp/ <- aqui pon tus paginas jsp

2. A los tags <html:text quitales el atributo "name", ya que este se utiliza para otras cosas, de tal forma que te queden asi:

<html:text property="login" size="20" maxlength="20" />

Pruebalo y ahi nos avisas
Killo que grande que eres!!!!!

Muchísimas gracias! Funciona perfecto. Y cuando no valida me deja en los campos los valores anteriores, que era lo que también andaba buscando. Además ya he conseguido obtener los valores en el Action.

Muchas gracias. TE lo agradezco un montón. Con las dudas resueltas sólo queda ponerse a currar.

Un saludo
  #8 (permalink)  
Antiguo 04/08/2008, 14:39
Usuario no validado
 
Fecha de Ingreso: junio-2008
Mensajes: 386
Antigüedad: 15 años, 10 meses
Puntos: 10
Respuesta: Preguntas sobre struts 1.3.8

De nada, para eso estamos para compartir el conocimiento.

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 12:52.