Galera, sei que dá para passar um array da página JSP para a classe repetindo o nome da textfield assim:
<input type="text" name="codigo" id="codigo">
<input type="text" name="codigo" id="codigo">
<input type="text" name="codigo" id="codigo">
Mas estou tentando fazer uma coisa um pouquinho diferente e não está dando certo. Quero que o usuário digite os dados
e clique em um botao “Próximo” e continue digitando vários valores, os campos são Código e Descrição, enquanto ele clicar
em “Próximo” continua cadastrando, quando ele clicar em “Confirma” passo o array para a minha classe usando beans
<jsp:setProperty name="form" property="codigo" value="${param.codigo}" ></jsp:setProperty>
Como faço para o campo “Codigo” e “Descricao” aceitarem os dados até que o usuário clique em “Confirmar” ???
Agradeço desde já a quem puder me ajudar.
Bom não entendi exatamente o que você quer fazer mas você pode salvar cada código e descrição numa variável de sessão, serializando os valores, a cada página você vai pegar a variável de sessão e incrementar os valores novos e depois no final você coloca o valor que está salvando na variável de sessão em um campo hidden e envia para a página “final” pois ai basta vc “deserializar” o valor que vai ser passado e fazer o tratamento dos dados.
O que eu quero fazer é o seguinte, estou desenvolvendo um sistema de gestão acadêmica e preciso montar os currículos dos cursos, aí tenho que disponibiliar 50 disciplinas para cadastro e cada disciplina tem carga horária total, carga horária mínima etc. . . . , seriam muitos campos para colocar na tela de uma só vez, então pensei em criar apenas uma linha com esses campos, o usuário vai digitando e clicando em PRÓXIMO, quando acabar clica em CONFIRMAR.
Eu não quero passar os dados para outra página e sim para a classe Curriculo que aplicará as regras de negócios.
Com o link do amigo acima, achei uma explicação bastante clara do que tentei te sugerir a fazer:
"…A lógica de negócio exige várias telas para sua conclusão
Existem casos onde a conclusão de um objetivo depende do envio de vários formulários, mas isso não é tão comum de acontecer. Mesmo assim, muitos consideram que escrever cada formulário no banco não compensa, porque o usuário pode desistir no meio do caminho. A solução mais comum é ficar guardando dados intermediários na sessão até chegar a última tela do processo, quando tudo é persistido.
Bom, pode ser um raro caso onde seja interessante armazenar na sessão. Porém, faça a coisa direito! Não espalhe por todo o código o armazenamento e a obtenção de objetos na Sessão. Se você tiver usando EJB, use um Stateful Session Bean para armazenar todos os objetos obtidos do usuário antes de persistir. Se tiver usando Spring ou outro contêiner de injeção de dependência, use uma classe de escopo de sessão para armazenar todos os objetos. Use o mínimo de classes de infraestrutura para evitar dependências desnecessárias…"
Realmente acho que deve ser um dos poucos casos onde seja interessante usar variáveis de sessão. Serão mais ou menos 50 itens de cada campo, não achei viável encher várias telas para isto, por isso estava tendo esta dificuldade. Vou tentar fazer agora e posto o resultado aqui.
Por enquanto obrigado.
Galera, fiz um exemplinho desta maneira e funcionou, não sei se o código ficou aquela maravilha, mas se alguém tiver alguma sugestão…
[code]
<c:if test="${param.Botao==‘Proximo’}">
<%
HttpSession variavel = request.getSession();
variavel.setAttribute(“codigo”, request.getParameter(“codigo”));
cadastro.setCodigo(variavel.getAttribute(“codigo”).toString());
%>
<c:if test="${cadastro.contador >= 2}">
<%out.println("<h1>Sai da execução</h1>");%>
</c:if>
<c:if test="${param.Botao == 'Confirma'}">
<%
out.println("Grava os dados");
%>
</c:if>
<%
out.println("<p>Contador: " + cadastro.getContador() + "</p>");
%>
</c:if>
[/code]
apenas uma dica:
<c:if test="${cadastro.contador >= 2}">
<%out.println("<h1>Sai da execução</h1>");%>
</c:if>
isso é desnecessário.
o melhor é…
<c:if test="${cadastro.contador >= 2}">
<h1>Sai da execução</h1>
</c:if>