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:
[code]
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);
}
}[/code]
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&uacute;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