Problema com List num Form do Struts 1.3.5

2 respostas
G

Estou com um problema em mapear uma tela de cadastro num Form do Struts.

Tenho um simples cadastro onde eu possuo contatos, +/- dessa forma:
Nome:
RG:
CPF:
...
Telefone:
Celular:
E-mail:

Esse formulário possui mais de um Bean representado: possui um bean Aluno (com Nome, Rg e CPF) e um List de Contato.
Cada bean Contato possui um atributo "tipo" (Ex: Telefone) e um "dado".

Código da Form:

package ...form;

imports... 

public class AlunoCadastroForm  extends ActionForm {
	
	private Aluno aluno;
	List<Contato> lstContato;
	
	public AlunoCadastroForm() {
		init();
	}
	protected void init()
	{
		this.aluno = new Aluno();
		
		Contato contatoTelefone = new Contato();
		contatoTelefone.setTipo("Telefone");
		Contato contatoCelular = new Contato();
		contatoCelular.setTipo("Celular");
		Contato contatoEmail = new Contato();
		contatoEmail.setTipo("Email");
		
		lstContato = new ArrayList<Contato>();
		lstContato.add(contatoTelefone);
		lstContato.add(contatoCelular);
		lstContato.add(contatoEmail);
	}
	public Aluno getAluno() {
		return aluno;
	}
	public void setAluno(Aluno aluno) {
		this.aluno = aluno;
	}
	
	public List<Contato> getLstContato() {
		return this.lstContato;
	}
	public void setLstContato(List<Contato> lstContato) {
		this.lstContato = lstContato;
	}
	
	public void reset(final ActionMapping map, final HttpServletRequest req) {
		init();
	}
	
	
	public Contato getContato(int index)
	{
		return (Contato) this.lstContato.get(index);
	}
}
Código da página JSP:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
<html:html>
	<head><title>Cadastro de Aluno</title>
	</head>
<html:errors/>
<H1>Cadastro de Aluno</H1>
<br>
<html:form action="/actionCadastraAluno" focus="aluno.nome">
    <input type="hidden" name="acao" value="salvar"/>
    <html:hidden property="aluno.id" /><br>

	<table width="580">
		<tr>
			<td colspan="3">Dados Pessoais </td>
		</tr>
		<tr>
			<td colspan="3">Nome:
				<html:text property="aluno.nome" size="60" maxlength="100"/> *
			</td>
		</tr>
		<tr>
			<td width="205">RG:
				<html:text property="aluno.rg" size="23" maxlength="30"/> *
			</td>
			<td colspan="2">CPF: 
				<html:text property="aluno.cpf" size="15" maxlength="11"/> * Somente números
			</td>
		</tr>
		<c:if test="${empty AlunoCadastroForm.lstContato}">
  			<br>Sem Contato
  		</c:if>
		<c:forEach var='contato' items='${AlunoCadastroForm.lstContato}'>
			<html:hidden name="contato" property="tipo"/>
			<tr><td colspan="3">
				<bean:write name="contato" property="tipo"/>: <html:text name="contato" property="dado" size="40" maxlength="40"/>
				</td>
			</tr>
		</c:forEach>
	</table>
<br>
<html:submit>Enviar dados</html:submit><br/>
</html:form>
</html:html>

Até aqui tudo roda certinho. Mas na Action, eu tento ler os dados da Form ao dar o submit, e não consigo ler os dados do List de Contato.

Vejam que eu construo a parte de contatos no formulário dinamicamente. Ele não dá erro algum na hora de carregar a página. Mas parece que ele não consegue popular os campos (atributos) de cada Contato no List.

trexo do código da minha Action (apenas testando):
public ActionForward salvar(ActionMapping mapping,
			ActionForm form,
			HttpServletRequest request,
			HttpServletResponse response)
	throws Exception {
		AlunoCadastroForm cadForm = (AlunoCadastroForm)form;
		Aluno aluno = cadForm.getAluno();
		
		AlunoService servAluno = new AlunoServiceImpl();
		
		System.out.println("Nome :"+aluno.getNome());
		System.out.println("RG :"+aluno.getRg());
		System.out.println("CPF :"+aluno.getCpf());
				
		System.out.println("contatos form ===========");
		for (int i=0;i<cadForm.getLstContato().size();i++) {
			
			System.out.println("tipo :"+cadForm.getLstContato().get(i).getTipo());
			System.out.println("dado :"+cadForm.getLstContato().get(i).getDado());
		}
		
		return(mapping.findForward("CadastraAluno"));
	}

retorna:

tipo : Telefone
dado: null
tipo : Celular
dado: null
tipo : E-mail
dado: null

ja tentei mudar a forma de colocar os campos no formulário JSP sem sucesso.

Para carregar a página com os dados para "editar" eles, consigo carregar os dados sem problemas.

alguém pode me ajudar? é urgente isso

desde já agradeço

2 Respostas

M

Opa,

você tem que criar uma propriedade em array no seu actionform para obter os valores do form porque não há referências entre eles, por isto não tem valor.

:okok:

G

hummm… não entendi muito bem. Você poderia me dar um exemplo de como fazer isso?

obrigado

Criado 12 de março de 2007
Ultima resposta 13 de mar. de 2007
Respostas 2
Participantes 2