Struts - Form

9 respostas
R

Boa Tarde Pessoal!

Estou tentando fazer o seguinte:

Tenho um formulario A que contem 3 campos: Nome,Telefone,Email.
No formulário B contém os campos do formulario A mais alguns.
O Usuário preenche os campos do formulário A e submete o formulário.
Aí começa o problema. Quando Eu encaminho para o formulário B, as informações se perdem.
Para o redirecionamento utilizo o:
mapping.findForward(“TelaUnidadeCondomino”);

No Struts config o parâmetro input de A é diferente de B, creio q seja por esse motivo.

Se alguém puder me dar uma explicação lógica para isso e ainda puder me sugerir uma solução ficaria super grato.

Tô apanhando feito cão!

Obrigado pessoal!

Ricardo Moura

9 Respostas

Mauricio_Linhares

Assim, como são formulários diferentes, estranho seria se eles mantivessem os dados, mas se você tá tentando fazer formulários do tipo “wizard” no Struts, deveria tentar isso aqui:

http://struts.apache.org/faqs/newbie.html#wizard

R

Márcio,
Não estou tentando fazer um wizard. Na primeira página o usuário pode preencher apenas os três campos:nome,telefone e email. Se ele quiser preencher as outras informações, tais como endereço, idade, sexo…, ele terá que submeter o formulário.
Assim sendo na minha Action Eu encaminho para o formulário que contém todas as informações(endereço, idade, sexo…)

As páginas JSP’s são diferentes.
Já tentei utilizando uma única classe form, mas mesmo assim os valores não são mantidos.
Já tentei utilizando uma classe form para cada formulário. Assim na minha Action setava as informações do FormA para o FormB e encaminha. E ainda assim as informações não se mantiam.

Debugando a aplicação consigo visualizar o objeto form preenchido corretamente, mas quando apresentado no JSP os campos estão vazios.

Tô meio perdido. Mais uma vez, se alguém tiver uma explicação para isso. Acredito que Eu esteja esbarrando em um pequeno detalhe, mas até o momento não consegui identificar.

Obrigado a todos!

Mauricio_Linhares

Em qual escopo esses formulários estão?

Como você está tentando repassar essa informações?

R

bom, vamos lá

//ESSA ACTION SETA AS INFORMAÇÕES QUE ESTAVAM NO FORM "A" E QUE SÃO NECESSÁRIAS NO FORM "B" E CHAMA A ACTION INICIA, QUE ENCAMINHA PARA O FORM "B". public ActionForward DetalheCondomino(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //CondominoUnidadeForm condominoUnidadeForm = (CondominoUnidadeForm) form; CondominoForm condominoForm = new CondominoForm(); String strTotalUnidades = (String) session.getAttribute("totalUnidades"); for(int i=0;i private String email; Formulario B -> private String[] condUniEmail; Espero que tenha ficado claro.
R

bom, vamos lá

//ESSA ACTION SETA AS INFORMAÇÕES QUE ESTAVAM NO FORM "A" E QUE SÃO NECESSÁRIAS NO FORM "B" E CHAMA A ACTION INICIA, QUE ENCAMINHA PARA O FORM "B". public ActionForward DetalheCondomino(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); //CondominoUnidadeForm condominoUnidadeForm = (CondominoUnidadeForm) form; CondominoForm condominoForm = new CondominoForm(); String strTotalUnidades = (String) session.getAttribute("totalUnidades"); for(int i=0;i private String email; Formulario B -> private String[] condUniEmail; Espero que tenha ficado claro.
R
bom, vamos lá
-------------STRUTS CONFIG - Actions
      <action
         attribute="condominoForm"
         input="view/jsp/condomino/condomino.jsp"
         name="condominoForm"
         parameter="method"
         path="/condomino"
         scope="request"
         type="com.mbw.mcp.poliweb.sindicoeletronico.web.action.CondominoAction"
         validate="false" />

      <action
         attribute="condominoForm"
         input="/view/jsp/condomino/unidadeCondomino.jsp"
         name="condominoForm"
         parameter="method"
         path="/condominoUnidade"
         scope="request"
         type="com.mbw.mcp.poliweb.sindicoeletronico.web.action.CondominoAction"
         validate="false"/>

-------------------Action
//ESSA ACTION SETA AS INFORMAÇÕES QUE ESTAVAM NO FORM "A" E QUE SÃO NECESSÁRIAS NO FORM "B" E CHAMA A ACTION INICIA, QUE ENCAMINHA PARA O FORM "B".
	public ActionForward DetalheCondomino(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
		HttpSession session = request.getSession();
		//CondominoUnidadeForm condominoUnidadeForm = (CondominoUnidadeForm) form;
		CondominoForm condominoForm = new CondominoForm(); 
		
		String strTotalUnidades = (String) session.getAttribute("totalUnidades");
		
		for(int i=0;i<strTotalUnidades.length();i++){
			
			if(condominoForm.getAuxLancamento()!=null && Integer.parseInt(condominoForm.getAuxLancamento())==i){
				condominoForm.setIdCondomino(condominoForm.getPkCondomino(i));
				condominoForm.setNome(condominoForm.getDesCondomino(i));
				condominoForm.setEmail(condominoForm.getCondUniEmail(i));
				condominoForm.setTelefone(condominoForm.getCondUniTelefone(i));
			}
		}
		return this.Inicia(mapping,condominoForm,request,response);
	}

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

public ActionForward Inicia(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
		CondominoForm condominoForm = (CondominoForm) form;
.
.
.
return mapping.findForward("TelaEditaCondomino");
}

Desta maneira Eu estou utilizando apenas uma classe form, que contém os campos dos dois formulários.
Mesmo sendo a mesma informação, por exemplo o "email", o tipo difere entre os formulários: 
     Formulário A  -> private String email;
     Formulario B -> private String[] condUniEmail;

Espero que tenha ficado claro.
R

Pessoal,

já perdi dias tentando resolver esse problema e nada. Vou ser mais claro na minha explicação para ver se alguém pode me ajudar:

Eu tenho dois form’s:
1 - condominoForm
2 - unidadeForm

no condominoForm eu tenho todos os campos para cadastrar uma pessoa:nome,cpf,endereço,email…etc.

no unidadeForm, além de outros campos, tenho os campos nome e e-mail.

nesta tela unidadeForm contém um botão q ao ser clicado encaminha o usuário para o form condominoForm para que ele possa preencher todas as informações.

Eu quero que neste encaminhamento os campos de nome e e-mail do condominoForm seja preenchido com os valores que estavam em unidadeForm.

Já tentei setar os valores de um form para o outro, tentei mudar o atributte do mapping, mas nada deu certo!

Eu não estudei profundamente o Struts e por isso estou apanhando tanto com uma bobagem dessa. E pior, não consigo ver uma explicação lógica!

Se alguém puder me dar uma luz vou ficar eternamente grato!

Obrigado a todos!

rodrigo_corinthians

Vc está usando um Action pra cada form, certo??

No Action de unidade vc seta os campos que precisa na sessão.

request.getSession(true).setAttribute("email", unidadeForm.getEmail());

Quando estiver no Action de condominio vc pega esse valor da sessão para depois mostrar na tela.

String email = (String) request.getSession(true).getAttribute("email");
condominioForm.setEmail(email);

// jsp.
<bean:define id="defineEmail" name="condominioForm" property="email" type="java.lang.String" />

<html:text property="email" value="<%=defineEmail%>" />

Agora se estiver usando apenas “um” Action teoricamente os valores dos campos apareceriam automaticamente na outra tela, verifica se o teu form condominio(ou unidade) sobrepôs o método “reset”, talves ele esteja limpando algum campo…

Sem mais, Rodrigo.

R

Eu não poderia fazer assim:

----------------------------- ACTION UNIDADE ---------------------------

<blockquote>public ActionForward DetalheCondomino(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

UnidadeForm unidadeForm = (UnidadeForm )form;

CondominoForm condominoForm = new CondominoForm();
condominoForm.setEmail(unidadeForm.getEmail(0));

	CondominoAction condominoAction = new CondominoAction(); 
	return condominoAction.DetalheCondomino(mapping,condominoForm,request,response);

}

-----------------------------------ACTION CONDOMINO------------------

<blockquote>public ActionForward DetalheCondomino(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

…

CondominoForm condominoForm = (CondominoForm) form;return mapping.findForward(TelaCondomino);

}

O valor de e-mail consta no condominoForm até que o mapping.findForward seja efetuado…depois o valor se perde, não aparece na tela!
As informações do mapping são do unidadeForm, e por isso acho, mas não tenho certeza, que seja por esse motivo.
alguém sabe como Eu poderia alterar as informações do objeto mapping em tempo de execução?

Complicado viu!

Criado 25 de julho de 2005
Ultima resposta 2 de ago. de 2005
Respostas 9
Participantes 3