Fazer o submit do html:form com um link [Resolvido]

Olá pessoal

Tenho um html:form que está funcionando corretamente com botoes html:submit. Mas querem que eu retire os botoes e use links :S entao estou tentando fazer isso.

Tentei desta forma:

<html:form action="/UpdateDeleteColecao.do" method="post" focus="colecao">  
     <table border="0" align="center">
         <tr><td width="50%"> Coleção </td><td width="50%"><html:text property="colecao" value="${requestScope.col.colecao}" readonly="true"/></td></tr>      
         <tr><td width="50%"> Descricão </td><td width="50%"><html:text property="descricao" value="${requestScope.col.descricao}"/></td></tr>
         <tr>
            <td width="50%" align="center">
              <html:link action="/UpdateDeleteColecao.do"> <bean:message key="button.add"/> </html:link> 
            </td>
            <td width="50%" align="center">
              <html:link action="/UpdateDeleteColecao.do"> <bean:message key="button.delete"/></html:link>
            </td>
         </tr>      
      </table><br/>
   </html:form> 

Não funciona. Eu recebo um erro de NullPointer Exception na funcao validate do meu form.

Com os botões funciona perfeitamente. Minha action é uma LookupDispatchAction, por isso chamo a mesma pra ambos, cmo vcs perceberam.

Existe uma forma de fazer isso?

Ah, e uma outra pequena pergunta, só aproveitando a vez. E se eu quisesse fazer o submit desse form a partir de links em um outro frame?

Agradeço.

Prq não pegar o form por js e dar um submit por js? Ai não importa aonde vc vai estar
^D

Eu queria evitar usar js, porque se ele estiver desabilitado meu submit vai falhar que é uma beleza… queria saber se tem outro jeito.

É, não tem como por um jeito baseado no struts mesmo. Então tentei javascript… e ainda assim nao deu certo… parece q na hora de dar o submit, ele nao se toca que tem que fazer todo aquele caminho do struts, passando pelo struts-config e etc… dá Resource /Action not found.

Alguem já deu submit do html:form com um link, tendo feito isso de qualquer maneira? Do jeito que for tá bom pra mim…hehehe

Estou fazendo assim:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@ taglib uri="/tags/struts-logic" prefix="logic" %>  
<%@ taglib uri="/tags/struts-bean" prefix="bean" %>
<%@ taglib uri="/tags/struts-html" prefix="html" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Coleçôes</title>
                
        <link rel="stylesheet" type="text/css" href="../config/estilos.css" />
        
        <html:base/>

        <script language="JavaScript">
            function dispatchIt()
            {
                document.forms[0].action="/AddColecao.do";
                document.forms[0].submit();
            }
        </script>                

     </head>
     <body onunload="window.parent.open('blank.jsp','down')">

    <span style="font-family:Sans-serif;">

    <table width="100%" align="center">
    <tr><td> Coleções </td></tr>
    <tr bgcolor="#000000"> <td></td></tr>
    </table>

    <br><br><br>
   <html:form action="/AddColecao.do" method="post" focus="colecao">  
   <table border="0" align="center">
   <tr><td width="50%"> Coleção </td><td width="50%"><html:text property="colecao"/></td></tr>      
   <tr><td width="50%"> Descricão </td><td width="50%"><html:text property="descricao"/></td></tr>
   </table><br/>

   <table width="100%">
       <tr>
           <td align="center"><a href="javascript:void(0);" onclick="javascript:dispatchIt();" property="method"> <bean:message key="button.add"/></a></td>
           <td align="center"><a href="teste.htm">Deletar</a></td>
           <td align="center"><a href="teste.htm">Localizar</a></td>
           <td align="center"><a href="teste.htm">Limpar</a></td>
       </tr>
   </table>


   </html:form> 
   <br><br><br>
   <html:errors/> 
   
   
    </span>
    </body>
</html>

Percebam que no formulario a acao está informada sendo a mesma do link. É porque eu estava tentando fazer com uma LookupDispatchAction, e agora estou tentando com uma action, porem nao houve mudança.

No clique do link, recebo uma pagina dizendo:

HTTP Status 404 - /AddColecao.do

type Status report

message /AddColecao.do

description The requested resource (/AddColecao.do) is not available.
Apache Tomcat/5.5.

Desculpem se a pergunta é burrica d+, mas nao tou conseguindo fazer sair. Ninguem aqui tentou fazer submit por link, pra dizer?

obrigada

Ele provavelmente não está levando em consideração onde a página está (ou em qual contexto esse action está). Coloque o caminho completo (com o contexto) pra ver se funciona.

E outra coisa, fazendo desse jeito você não vai poder usar o validator pra gerar JavaScript pra validação.

ptz, quer dizer que validacao, só com os botoezinhos? Mas eles são bem feios né :? ?
De qualquer forma, obrigada

[quote=moonlight]ptz, quer dizer que validacao, só com os botoezinhos? Mas eles são bem feios né :? ?
De qualquer forma, obrigada [/quote]

Não exatamente, mas você vai ter que fazer a chamada da função de validação dentro daquela sua função de submit.

Se você tirar:

document.forms[0].action="/AddColecao.do";

Funciona?

Funcionou colocando o caminho todo… tipo /Aplicacao/Action.do… nesse caso, funciona até o validator e tudo mais… perfeitamente.

Mas só funciona pra Action que está informada no form… se eu atribuir outra pelo js, o troço simplesmente nao mexe… vc clica e nada acontece.

Pra dispatchAction nao está funcionando pq ainda nao consegui arrumar um jeito de passar o parametro, mas é isso que estou tentando aqui.

[quote=moonlight]Pra dispatchAction nao está funcionando pq ainda nao consegui arrumar um jeito de passar o parametro, mas é isso que estou tentando aqui.
[/quote]

Oxe, passa o parâmetro direto na função do JS.

Então, é o que estou fazendo. Pra dispatch estou passando parent.top.document.addColecaoForm.action="/AugeProducao/UpdateDeleteColecao.do?method=button.add"… só que aí ele me dá o erro:

Action[/UpdateDeleteColecao] missing resource 'button.delete" in key method map

sendo que meu método está assim:


  protected Map getKeyMethodMap() {
      Map map = new HashMap();
      map.put("button.add", "update");
      map.put("button.delete", "delete");
       System.out.println((String)map.get( "button.delete ")); 
      return map;
  }

e aí, qdo eu peço pra imprimir, ele imprime “delete”… certim certim

É esse o problema que estou tentando resolver agora

Joguei a dispatchAction fora e usei smart forwarding, de acordo com isso aqui:
http://www.jguru.com/faq/view.jsp?EID=995474

Mto obrigada pelo help :mrgreen: