Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Java (http://www.forosdelweb.com/f45/)
-   -   problema con formularios (http://www.forosdelweb.com/f45/problema-con-formularios-585160/)

asile 11/05/2008 06:14

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!

oblivion 12/05/2008 09:14

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.

Lino-kun 12/05/2008 15:24

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.

GreenEyed 13/05/2008 00:01

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!

asile 13/05/2008 02:50

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!

Lino-kun 13/05/2008 08:41

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.

asile 13/05/2008 14:17

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

asile 16/06/2008 02:58

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!


La zona horaria es GMT -6. Ahora son las 15:36.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.