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

problema con formularios

Estas en el tema de problema con formularios en el foro de Java en Foros del Web. Hola! bueno os voy a explicar un problemilla que tengo y que no soy capaz de solucionar, seguro que es una bobada, pero no veo ...
  #1 (permalink)  
Antiguo 11/05/2008, 06:14
 
Fecha de Ingreso: marzo-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
problema con formularios

Hola! bueno os voy a explicar un problemilla que tengo y que no soy capaz de solucionar, seguro que es una bobada, pero no veo el fallo
Tengo dos enlaces que son ListarParticulares y ListarEmpresas, los dos tienen el mismo formulario, pero dependiendo de cual pinche pues te muestra una cosa. Si lo hago solo con uno de los dos me funciona pero si pongo los dos, me muestra en los dos lo mismo en mi caso el listado de particulares
Mi código es este (uso struts con java)

<html:form action="consultarC.do" styleId="forms">
<html:hidden property="tipo" value="particular"/>
<a href="javascript:enviar();" class="enlaceAzul">Listar particulares</a>
</html:form>

<html:form action="consultarC.do" styleId="forms">
<html:hidden property="tipo" value="empresa"/>
<a href="javascript:enviar();" class="enlaceAzul">Listar empresas</a>
</html:form>

Cambio el value, pero siempre que le doy al enlace y miro en los log, el value siempre coge el de particular, por eso siempre me muestra los mismo.
el struts.config está bien, porque al probarlo por separado funciona perfecto

Alguan idea??
Muchas gracias!
  #2 (permalink)  
Antiguo 12/05/2008, 09:14
 
Fecha de Ingreso: marzo-2008
Mensajes: 20
Antigüedad: 16 años, 1 mes
Puntos: 2
Re: problema con formularios

Es lógico que coja el primero cuando hay más de uno iguales.
Prueba a ponerles identificadores y que sean diferentes y luego desde el método enviar() haces un document.NOMBREFORMULARIO.submit();

Tal vez debas discriminar en el método cual de los dos ha sido pulsado, pasando por parámetro tipo enviar(particular)/enviar(empresa) y luego con un simple if lo tendrías hecho.
  #3 (permalink)  
Antiguo 12/05/2008, 15:24
Avatar de Lino-kun  
Fecha de Ingreso: mayo-2008
Ubicación: Cuernavaca Morelos Mexico
Mensajes: 126
Antigüedad: 15 años, 11 meses
Puntos: 2
Re: problema con formularios

Hola asile.

Para empezar creo que seria bueno comentar como funcionan los formularios en struts y como funcionan los action.

Cuando trabajas con Web applications Struts se crea un archivo llamado struts-config.xml en este configuras que form pertenece a que action por ejemplo en tu caso.
Código PHP:
form-beans>
  <
form-bean name="Formulario" type="Formulario"></form-bean>
</
form-beans>

<
action-mappings>
      <
action path="/consultarC" type="ActionFormulario" name="Formulario" scope="request" validate="true" input="/index.jsp">
        <
forward></forward>
      </
action>
    </
action-mappings
También es buena idea delcarar los forwards desde un principio.

Ya en un jsp cuando invoques a tu formulario dejas tu código idéntico pero sin el .do

<html:form action="/consultarC" styleId="forms">
<html:hidden property="tipo" value="particular"/>
<a href="javascript:enviar();" class="enlaceAzul">Listar particulares</a>
</html:form>

<html:form action="/consultarC" styleId="forms">
<html:hidden property="tipo" value="empresa"/>
<a href="javascript:enviar();" class="enlaceAzul">Listar empresas</a>
</html:form>

Y en tu clase ActionFormulario utiliza un DispatchAtion con este tipo de action puedes decidir que método se utilizara particular o empresa.

Es algo complejo pero espero averte ayudado un poco. En Internet busca acerca del DispatchAction seguro que solucionas tu problema.
  #4 (permalink)  
Antiguo 13/05/2008, 00:01
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: problema con formularios

Mira a ver el HTML que te generan los dos formularios por separado y el que te generan conjunto. Por otro lado... ¿que hace la funcion javascrip enviar()? ¿Puede ser que modifique el parametro tipo de alguna forma?

S!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #5 (permalink)  
Antiguo 13/05/2008, 02:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: problema con formularios

ya lo arreglé cambiando el Id del formulario, porque al tener el mismo es por lo que daba el error.
En cuanto a la utilización de los Action y struts-config ya los sabía usar, pero gracias de todas formas.
En cuanto al DispatchAction ... también lo he usado en un formulario para dar alta a clientes y pongo un botón comprobar login (y el de enviar). No me funciona como esperaba, ya que al darle a comprobar login me sale toda la validación del formulario en vez de comprobarme si el login existe o no. Si tienes alguna idea para esto ... también te la agradezco

Muchas gracias a todos por vuestras ideas!
  #6 (permalink)  
Antiguo 13/05/2008, 08:41
Avatar de Lino-kun  
Fecha de Ingreso: mayo-2008
Ubicación: Cuernavaca Morelos Mexico
Mensajes: 126
Antigüedad: 15 años, 11 meses
Puntos: 2
Re: problema con formularios

¿Cómo trabaja un DispatchAction?

Te pondré un ejemplo suponte que tengo una aplicación en la que necesito usar un mismo formulario pero cuando presiono un botón debe hacer un proceso y cuando presiono el otro debe hacer otro proceso.

Si esto te ocurre en un mismo formulario intenta algo así.

Código PHP:
//Supuesto action.
public class ConsultaAction extends DispatchAction{

    public 
ActionForward doLogin(ActionMapping mapping,ActionForm form,HttpServletRequest requestHttpServletResponse response)throws IOExceptionServletException{
                  
//codigo de acceso a BD para tu login, de preferencia has una capa BO
                 // y desde la capa BO invoca una DAO que es la que invoca a las BD
            
}
    
    public 
ActionForward doEnviar(ActionMapping mapping,ActionForm form,HttpServletRequest requestHttpServletResponse response)throws IOExceptionServletException{
        
//codigo de enviar
    

En tu jsp algo como esto.

Código PHP:
<html:form action="/ConsultaAction" name="ConsultaForm" type="com.lpsoft.consulta.form.ConsultaForm">
<
html:hidden property="dispatch" value=""/> 
El parámetro dispatch en un hidden le dice al compilador que tiene un comportamiento de despachador de peticiones, el hecho de que permanezca con un valor nulo es para que puedas elegir cual método se ejecuta al presionar algún botón.

Código PHP:
<html:submit onClick="return enviar('ConsultaForm','login')>Login</html:submit>
<html:submit onClick="
return enviar('ConsultaForm','enviar')>Envia</html:submit
Generas una function de java script para indicar cual metodo del dispatch se ejecutara.

Código PHP:
function enviar(formutp){
   var 
formulario document.forms[formu]; //formulario
   
var tipo tp//metodo a ejecutar
  
    
if (tipo==login){
       
alert("login");
       
formulario['dispatch'].value="doLogin";
     }else if(
tipo==enviar){
       
formulario['dispatch'].value="doEnviar";
     }
   }else{
     
alert("metodo Action incorrecto");
     return 
false;
   }
   return 
true;

El principio de la sabiduria es el respeto y el amor a Dios.
  #7 (permalink)  
Antiguo 13/05/2008, 14:17
 
Fecha de Ingreso: marzo-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: problema con formularios

Si más o menos entendía lo que hace. Busqué en internet porque en mi formulario tenía dos botones (uno para enviar el formulario de alta y el otro para comprobar si el login esta disponible) y lo uso así (ten en cuenta que uso struts)

Esto va en el Action
Código PHP:
public class AltaAction extends LookupDispatchAction{

    protected 
Map getKeyMethodMap() {
        
log.debug("::::::::::Entro para comprobar los botones");
        
// TODO Auto-generated method stub
        
Map map = new HashMap();
        
map.put("button.comprobar""comprobar");
        
map.put("button.guardar""add");

        return 
map;
    }

public 
ActionForward comprobar(ActionMapping mapping,ActionForm form,HttpServletRequest request,    HttpServletResponse response)
{
        
//aquí compruebo lo del alias
}
public 
ActionForward add(ActionMapping mappingsActionForm formHttpServletRequest requestHttpServletResponse response)
{
       
//aquí hago el alta del usuario
}


Para que se pueda diferenciar los botones en el struts-config hay un parametro que hay que rellenar

El problema lo tengo en que para entrar en el action, primero pasa por el Form y realiza la comprobación de errores de los campos, por lo tanto si no he rellenado más que el campo del alias y le doy a comprobar alias, entra en el form y me pone los errores porque no están todos los datos completados.
Si tengo todos los campos obligatorios rellenos, me lo hace perfectamente, si le doy al comprobar comprueba y si le doy a añadir añade
Pero no sé como solucionarlo sin tener que cambiar la comprobación de errores al Action
  #8 (permalink)  
Antiguo 16/06/2008, 02:58
 
Fecha de Ingreso: marzo-2008
Mensajes: 58
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: problema con formularios

volviendo al problema del principio. La solución era poner diferentes ids al formulario para que no hubiera problema, pero si se da el caso de que no sabes cuantos formularios vas a tener, ya que cada usuario puede tener muchos (productos por ejemplo para enviar al carro) cómo se podría arreglar ese problema del formulario??
es que no sé cómo solucionar ese caso

Muchas gracias por vuestra ayuda!
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 16:24.