Struts -> Preservar Dados

9 respostas
passos

Salve gALLera,

Em determinada parte do meu projeto tenho um cadastro de cliente onde preciso deixar o usuario alterar a UF do cadastro e então trazer todas as cidades daquela UF, a minha dificuldade e como manter os dados ja preenchidos apos ir ao banco e trazer a combo com as cidades preenchidas?

Existe algum recurso que me poupe trabalho em fazer isso no Struts?

9 Respostas

Marques

Se vc definir o scope da tua action como session não resolve?

Sds,

Marques

NoodleZ

scope session resolve, mas naum eh a melhor solução, sessão não deve ser usado pra esse tipo de coisa. :oops:

o form pode estar em scopo de request não tem problema, o importante eh q a action que voce chama na mudanca de UF tenha o mesmo form da action que voce usou para chegar na tela de preenchimento de cadastro.

como exemplo no struts-config:

<action path="/cadastraUsuario" name="UsuarioForm" validate="false" scope="request" type="UsuarioAction">
   <forward name="sucesso" path="cadastro.jsp" />
 </action>
<action path="/buscaUF" name="UsuarioForm" validate="false" scope="request" type="BuscaUFAction">
    <forward name="sucesso" path="cadastro.jsp" />
 </action>

note que as duas action tem o mesmo form.

Espero que tenha ajudado.
Abraço

passos

Não funfou não… eu tenho que fazer alguma coisa no meu action que vai colocar as cidades no request?

J

Coloque o estado em campos hidden assim ao submeter o form vc não perde nada

NoodleZ

Se as propriedades do seu Form estão condizentes com o nome das suas propriedades no JSP, aquilo que indiquei deve funcionar. O problema é outro…

rodrigoallemand

Faz assim
StrutsConfig


<\action>

no jsp
<html:form action=“action.do”>

</html:form>

Só isso, mais nada…
Na propria arquitetura do Struts existe um HelperBean que é responsavel por este preenchimento pós execução…

jgbt

use um iframe e ao mudar o valor do cambo dispare um função javascript que seta o source do iframe para uma pagina que faz a consulta e modifica os campos que vc quer via window.parent.
com isso vc não precisa submeter toda a pagina.

[]'s

passos

Devo estar fazendo alguma merda pois não esta preenchendo automaticamente.

cliente_cadastro.vm (Form):

&lt;input type="text" name="nome" size="36" value="$!form.nome" /&gt;

struts-config.xml:

&lt;form-bean name="form_cliente_cadastro"
			type="org.apache.struts.validator.DynaValidatorForm"&gt;
			&lt;form-property name="codigo" type="java.lang.String" /&gt;
			&lt;form-property name="nome" type="java.lang.String" /&gt;
			&lt;form-property name="endereco" type="java.lang.String" /&gt;
			&lt;form-property name="complemento" type="java.lang.String" /&gt;
			&lt;form-property name="bairro" type="java.lang.String" /&gt;
			&lt;form-property name="uf" type="java.lang.String" /&gt;
		&lt;/form-bean&gt;
		&lt;action 
			path="/cliente_cadastro"
			name="form_cliente_cadastro" 
			type="...........ClienteCadastro"
			validate="false" 
			scope="request"
		&gt;
			&lt;forward name="erro" path="clienteLocalizar" /&gt;
			&lt;forward name="sucesso" path="clienteCadastro" /&gt;
		&lt;/action&gt;
		&lt;action 
			path="/busca_uf"
			name="form_cliente_cadastro" 
			type="...........BuscaUF" 
			validate="false"
			scope="request"
		&gt;
			&lt;forward name="erro" path="clienteLocalizar" /&gt;
			&lt;forward name="sucesso" path="clienteCadastro" /&gt;
		&lt;/action&gt;

BuscaUF:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class BuscaUF extends Action {
	/*
	 * (non-Javadoc)
	 * 
	 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping,
	 *      org.apache.struts.action.ActionForm,
	 *      javax.servlet.http.HttpServletRequest,
	 *      javax.servlet.http.HttpServletResponse)
	 */
	public ActionForward execute(ActionMapping maping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		return maping.findForward("sucesso");
	}
}
jgbt

cara,
se vc fizer com o iframe, fica muito mais limpo o codigo da sua action, e a pagina fica mais rapida, pq vc não vai dar reload na tela toda.
não tenho os codigos aqui, mas da uma pesquisada no forum que eu acho que ja postei um exemplo disso.

[]'s

Criado 24 de maio de 2005
Ultima resposta 30 de mai. de 2005
Respostas 9
Participantes 6