Limpar campos DynaValidatorForm

5 respostas
O

Bom dia galera. Estou usando o Struts 1.3 e os meus ActionForm sao DynaValidatorForm. A resposta de todos os meus formularios sao enviadas para a mesma pagina que enviou. Puts que explicacao hein! Ou seja, a resposta do meu formulario submetido sera ele mesmo. Para que se acaso o usuario quiser efetuar outro cadastro ele ja se encontra no mesmo. Dae surge alguns problemas que eu resolvi mas tenho duvidas. Antes, toda vez que eu submetia um dado a resposta vinha com os mesmos dados que foram enviados. Ou seja, os campos do formulario nao eram resetados. Reparei que a partir do momento que usei no meu Compomente ActionForward o elemento redirect=“true” os campos foram resetados. Procurei na internet a respeito e encontrei que ao usar este elementro (redirect=“true”) os seus parametros de solicitacao e os atributos do contexto da solicitacao sao removidos. Tentei usar o metodo reset() no meu Action mas nao surgiu efeito. Andei procurando e encontrei que se acaso eu sobrescrever o metodo reset() no meu action eu tenho que retirar os meus atributos da sessao.

DynaValidatorForm dyna = (DynaValidatorForm)form;
request.getSession().removeAttribute("listaContratos");
request.getSession().removeAttribute("listaModulos");
dyna.reset(mapping, request);

Tambem usei e nao surgiu efeito. Nesse meu caso eu vou ter que usar esse elemento (redirect=“true”) sempre para dar certo?

<action 
  path="/SaveInsertModuloContratadoAction"
  type="br.com.MGFSuporte.controller.EditModuloContratadoAction"
  name="SaveInsertModuloContratadoForm"
  scope="request"
  parameter="operacao"
  input="/pages/cadastro/CadastroModuloContratado.jsp">
    <forward 
      name="success"
      path="/CadastroModuloContratado.do"
      redirect="true"/>
</action>

Obrigado!

5 Respostas

Leozin

Olá

é simples:

dynaForm.getMap().clear();
O

Caro Leozin .
Deu certo, muito obrigado. Sem querer ser chato mas necessito de mais uma coisa. Porque que o metodo reset() nao funcionou? E porque que eu tenho que usar dessa form. Limpar os maps.

Obrigado…

Leozin

Cara, essa é uma pergunta que eu prefiro nem ficar perguntando porque senão não vou conseguir dormir hahahaha

em outras palavras: não faço a mínima idéia

mas segundo a documentação

http://struts.apache.org/1.3.9/apidocs/org/apache/struts/action/DynaActionForm.html#reset(org.apache.struts.action.ActionMapping,%20javax.servlet.ServletRequest)

Tá ae. Sinceramente não sei o que seria o “default state” =/

O

Ok. Mas ae surgiu um outro problema. Se eu tirar esse elemento (redirect=“true”) do meu elemento ActionForward, a minha pagina nao mostra o Codigo de erro do servidor, como por exemplo se acaso o usuario cadastrar 2 CNPJ iguais a pagina deve fornecer:

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
br.com.MGFSuporte.DAO.HibernateUtil.comitTransacao(HibernateUtil.java:71)
br.com.MGFSuporte.filtros.HibernateFilter.doFilter(HibernateFilter.java:32)

Mas se eu deixar esse elemento (redirect=“true”) dae imprime no log do servidor…

O

Caro Leozin.
Andei dando uma pesquisada na documentacao do struts e encontrei o porque que o metodo reset() nos objetos DynaValidatorForm nao funcionam da mesma maneira que os do objeto ActionForm. Ae la vai…Na documentacao da classe DynaActionForm que no caso é superclasse de DynaValidatorForm tem uma nota importante para se ver:
http://struts.apache.org/1.3.8/apidocs/index.html

USAGE NOTE - Since Struts 1.1, the reset  method no longer initializes property values to those specified in <form-property> elements in the Struts module configuration file. If you wish to utilize that behavior, the simplest solution is to subclass DynaActionForm and call the initialize method inside it.

E o metodo initialize()
http://struts.apache.org/1.3.8/apidocs/index.html

Valeu pela ajuda…

Criado 25 de fevereiro de 2008
Ultima resposta 27 de fev. de 2008
Respostas 5
Participantes 2