Após percorrer uma coleção com logic:iterate
Eu mostro os valores dentro da tag html:text
ao alterar os valores exibidos e submeter a lista vem vazia…
alguém já teve esse problema utilizando struts 1?
Após percorrer uma coleção com logic:iterate
Eu mostro os valores dentro da tag html:text
ao alterar os valores exibidos e submeter a lista vem vazia…
alguém já teve esse problema utilizando struts 1?
Matraca, posta seu código aí …
Estou desenvolvendo um sistema com struts 1 e uso o iterate quem sabe posso te ajudar =)
Valew
Matraca, posta seu código aí …Estou desenvolvendo um sistema com struts 1 e uso o iterate quem sabe posso te ajudar =)
Valew
Fala Zillo, o código é o seguinte…
Meu list
private List<ProcedimentoDTO> listaDeProcedimentos;
Meu iterate (JSP)
<logic:iterate id="procedimentos" name="guiaDeAtendimentoForm" property="guiaDeAtendimentoDTO.listaDeProcedimentos" indexId="cont">
<tr id="procedimento<%=cont%>">
<td align="left" style="width: 30%"><html:text name="procedimentos" property="codigo" indexed="true" /></td>
<td align="left" style="width: 30%"><html:text name="procedimentos" property="nome" indexed="true" /></td>
<td align="left" style="width: 30%"><html:text name="procedimentos" property="descricao" indexed="true" /></td>
<td><%= cont %></td>
</tr>
</logic:iterate>
meu GET e SET
public void setListaDeProcedimentos(List<ProcedimentoDTO> listaDeProcedimentos) {
this.listaDeProcedimentos = listaDeProcedimentos;
}
public List<ProcedimentoDTO> getListaDeProcedimentos() {
if(listaDeProcedimentos == null){
listaDeProcedimentos = new ArrayList<ProcedimentoDTO>(20);
listaDeProcedimentos.add(new ProcedimentoDTO());
}
return listaDeProcedimentos;
}
Pesquisando na net, eu descobri que o iterate apenas mostra os dados na tela, e que quando eu faço o submit ele não vai pegar os valores que eu coloquei no campo html:text
Só que não sei qual a solução para pegar esses dados…
Baseado no código que você postou montei o seguinte método que você deve implementa-lo:
public ProcedimentoDTO getProcedimento(int index){
while(listaDeProcedimentos.size() <= index){
listaDeProcedimentos.add(new ProcedimentoDTO());
}
return listaDeProcedimentos.get(index);
}
Cara, tinha feito um post aqui explicando o método (que na verdade não sei ao certo) mas por um motivo que desconheço ele não foi submetido.
Mas enfim, enfrentava o mesmo problema que você, exibia uma lista num logic:iterate e quando submetia a lista vinha com apenas 1 item, daí encontrei esse método numa parte anterior do sistema (que não foi iniciado por mim) e o implementei só pra ver no que dava… e foi!
Bom, tenta ae e ve no que da.
Abraços.
Baseado no código que você postou montei o seguinte método que você deve implementa-lo:public ProcedimentoDTO getProcedimento(int index){ while(listaDeProcedimentos.size() <= index){ listaDeProcedimentos.add(new ProcedimentoDTO()); } return listaDeProcedimentos.get(index); }Cara, tinha feito um post aqui explicando o método (que na verdade não sei ao certo) mas por um motivo que desconheço ele não foi submetido.
Mas enfim, enfrentava o mesmo problema que você, exibia uma lista num logic:iterate e quando submetia a lista vinha com apenas 1 item, daí encontrei esse método numa parte anterior do sistema (que não foi iniciado por mim) e o implementei só pra ver no que dava… e foi!Bom, tenta ae e ve no que da.
Abraços.
Cara, eu implementei o método que você pediu dentro do meu GuiaDeAtendimentoDTO.
Porém o erro persiste…
De acordo com o problema que você teve, a lista vinha com 1 item né?
Mas o meu a lista vem sempre vazia…
eu instancio 20 procedimentos nessa lista, mas eles não tem valor algum.
E quando eu colocasse o código no campo <html:text property=“codigo”>
ele faria o procedimento.setCodigo(‘valor do campo da jsp’);
e ele não faz isso…
public List<ProcedimentoDTO> getListaDeProcedimentos() {
if(listaDeProcedimentos == null){
listaDeProcedimentos = new ArrayList<ProcedimentoDTO>(20);
for (int i = 0; i < 20; i++) {
listaDeProcedimentos.add(new ProcedimentoDTO());
}
}
return listaDeProcedimentos;
}
public ProcedimentoDTO getProcedimento(int index){
while(listaDeProcedimentos.size() <= index){
listaDeProcedimentos.add(new ProcedimentoDTO());
}
return listaDeProcedimentos.get(index);
}
Baseado no código que você postou montei o seguinte método que você deve implementa-lo:public ProcedimentoDTO getProcedimento(int index){ while(listaDeProcedimentos.size() <= index){ listaDeProcedimentos.add(new ProcedimentoDTO()); } return listaDeProcedimentos.get(index); }Cara, tinha feito um post aqui explicando o método (que na verdade não sei ao certo) mas por um motivo que desconheço ele não foi submetido.
Mas enfim, enfrentava o mesmo problema que você, exibia uma lista num logic:iterate e quando submetia a lista vinha com apenas 1 item, daí encontrei esse método numa parte anterior do sistema (que não foi iniciado por mim) e o implementei só pra ver no que dava… e foi!Bom, tenta ae e ve no que da.
Abraços.
Outro detalhe,
ele nem ta passando pelo método…
;/
Matraca, pelo o que eu entendi você tem uma tela que tráz os valores do banco e coloca nos text e depois você altera os valores e os recupera da tela para gravar no banco…
Segue como estou fazendo hoje, talvez te dê uma luz =)
1 - cria um javabean(model) para guardar os procedimentos
2 - cria método para consultar os procedimentos e retornar um list
3 - cria um Action para retornar essa lista para o jsp
4 - no jsp eu uso a taglib core e varro a lista através de um c:foreach
Aqui temos os valores carregados na tela
5 - Para capturar crie um ActionForm e mapei seu struts-config.xml
6 - em um novo objeto empresa repupere os valores do ActionForm
7 - chame o método de inserção no banco passando esse objeto
Matraca, pelo o que eu entendi você tem uma tela que tráz os valores do banco e coloca nos text e depois você altera os valores e os recupera da tela para gravar no banco...Segue como estou fazendo hoje, talvez te dê uma luz =)
1 - cria um javabean(model) para guardar os procedimentos
2 - cria método para consultar os procedimentos e retornar um list
3 - cria um Action para retornar essa lista para o jsp
4 - no jsp eu uso a taglib core e varro a lista através de um c:foreach
Aqui temos os valores carregados na tela
5 - Para capturar crie um ActionForm e mapei seu struts-config.xml
6 - em um novo objeto empresa repupere os valores do ActionForm
7 - chame o método de inserção no banco passando esse objeto
Segue os códigos:
modelo:public class Procedimento {
private Integer codigo;
private String nome;
private String descricao;
public Integer getCodigo() {
return codigo;
}
public void setCodigo(Integer codigo) {
this.codigo = codigo;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
}
public class ProcedimentoConsultaAction extends Action{
public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res)throws Exception{
List<Procedimento> lista = new ProcedimentoDAO().consulta();
req.setAttribute("lista", lista);
return map.findForward("ok");
}
}
<form>
<c:forEach var="listatela" items="${procedimento.lista}">
<input type="text" name="procedimento.codigo" value="${listatela.codigo }"></input>
<input type="text" name="procedimento.nome" value="${listatela.nome }"></input>
<input type="text" name="procedimento.descricao" value="${listatela.descricao }"></input>
</c:forEach>
<input type=submit ></input>
</form>
<action-mappings>
<action path="/consulta" type="ProcedimentoConsultaAction">
<forward name="ok" path="/procedimento.jsp"></forward>
</action>
</action-mappings>
Para gravar:
Action que captura os dados:public class ProcedimentoAction extends Action{
public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res)throws Exception{
Procedimento procedimento = ((ProcedimentoForm) form).getProcedimento();
ProcedimentoDAO dao = new ProcedimentoDAO();
dao.adiciona(procedimento);
return map.findForward("ok");
}
}
public class ProcedimentoForm extends ActionForm{
private Procedimento procedimento = new Procedimento();
public Procedimento getProcedimento(){
return procedimento;
}
}
<form-beans>
<form-bean name="Procedimento" type="ProcedimentoForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/consulta" type="ProcedimentoConsultaAction">
<forward name="ok" path="/procedimento.jsp"></forward>
</action>
<action path="/editar" type="ProcedimentoAction" name="Procedimento">
<forward name="ok" path="/procedimento.jsp"></forward>
</action>
</action-mappings>
Se não viajei, espero ter ajudado...
Abraço
Baseado no código que você postou montei o seguinte método que você deve implementa-lo:public ProcedimentoDTO getProcedimento(int index){ while(listaDeProcedimentos.size() <= index){ listaDeProcedimentos.add(new ProcedimentoDTO()); } return listaDeProcedimentos.get(index); }Cara, tinha feito um post aqui explicando o método (que na verdade não sei ao certo) mas por um motivo que desconheço ele não foi submetido.
Mas enfim, enfrentava o mesmo problema que você, exibia uma lista num logic:iterate e quando submetia a lista vinha com apenas 1 item, daí encontrei esse método numa parte anterior do sistema (que não foi iniciado por mim) e o implementei só pra ver no que dava… e foi!Bom, tenta ae e ve no que da.
Abraços.
Cara,
consegui fazer funcionar…
foi só colocar o método no form e chamar o get da dto…
veja:
public ProcedimentoDTO getProcedimento(int index){
while(getGuiaDeAtendimentoDTO().getListaDeProcedimentos().size() <= index){
getGuiaDeAtendimentoDTO().getListaDeProcedimentos().add(new ProcedimentoDTO());
}
return getGuiaDeAtendimentoDTO().getListaDeProcedimentos().get(index);
}
valeu mesmo a força!
Obrigado a todos.
Matraca, pelo o que eu entendi você tem uma tela que tráz os valores do banco e coloca nos text e depois você altera os valores e os recupera da tela para gravar no banco...Segue como estou fazendo hoje, talvez te dê uma luz =)
1 - cria um javabean(model) para guardar os procedimentos
2 - cria método para consultar os procedimentos e retornar um list
3 - cria um Action para retornar essa lista para o jsp
4 - no jsp eu uso a taglib core e varro a lista através de um c:foreach
Aqui temos os valores carregados na tela
5 - Para capturar crie um ActionForm e mapei seu struts-config.xml
6 - em um novo objeto empresa repupere os valores do ActionForm
7 - chame o método de inserção no banco passando esse objetoSegue os códigos:
modelo:Action que retorna a lista:public class Procedimento { private Integer codigo; private String nome; private String descricao; public Integer getCodigo() { return codigo; } public void setCodigo(Integer codigo) { this.codigo = codigo; } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } }JSP:public class ProcedimentoConsultaAction extends Action{ public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res)throws Exception{ List<Procedimento> lista = new ProcedimentoDAO().consulta(); req.setAttribute("lista", lista); return map.findForward("ok"); } }Mapeia o strust-config.xml:<form> <c:forEach var="listatela" items="${procedimento.lista}"> <input type="text" name="procedimento.codigo" value="${listatela.codigo }"></input> <input type="text" name="procedimento.nome" value="${listatela.nome }"></input> <input type="text" name="procedimento.descricao" value="${listatela.descricao }"></input> </c:forEach> <input type=submit ></input> </form><action-mappings> <action path="/consulta" type="ProcedimentoConsultaAction"> <forward name="ok" path="/procedimento.jsp"></forward> </action> </action-mappings>Para gravar:
Action que captura os dados:ActionForm:public class ProcedimentoAction extends Action{ public ActionForward execute(ActionMapping map, ActionForm form, HttpServletRequest req, HttpServletResponse res)throws Exception{ Procedimento procedimento = ((ProcedimentoForm) form).getProcedimento(); ProcedimentoDAO dao = new ProcedimentoDAO(); dao.adiciona(procedimento); return map.findForward("ok"); } }Mapeia o struts-config.xml:public class ProcedimentoForm extends ActionForm{ private Procedimento procedimento = new Procedimento(); public Procedimento getProcedimento(){ return procedimento; } }<form-beans> <form-bean name="Procedimento" type="ProcedimentoForm"></form-bean> </form-beans> <action-mappings> <action path="/consulta" type="ProcedimentoConsultaAction"> <forward name="ok" path="/procedimento.jsp"></forward> </action> <action path="/editar" type="ProcedimentoAction" name="Procedimento"> <forward name="ok" path="/procedimento.jsp"></forward> </action> </action-mappings>Se não viajei, espero ter ajudado...
Abraço
Consegui fazer funcionar aqui amigo,
muito obrigado!
:D
Baseado no código que você postou montei o seguinte método que você deve implementa-lo:public ProcedimentoDTO getProcedimento(int index){ while(listaDeProcedimentos.size() <= index){ listaDeProcedimentos.add(new ProcedimentoDTO()); } return listaDeProcedimentos.get(index); }Cara, tinha feito um post aqui explicando o método (que na verdade não sei ao certo) mas por um motivo que desconheço ele não foi submetido.
Mas enfim, enfrentava o mesmo problema que você, exibia uma lista num logic:iterate e quando submetia a lista vinha com apenas 1 item, daí encontrei esse método numa parte anterior do sistema (que não foi iniciado por mim) e o implementei só pra ver no que dava… e foi!Bom, tenta ae e ve no que da.
Abraços.
Cara,
consegui fazer funcionar…
foi só colocar o método no form e chamar o get da dto…
veja:
public ProcedimentoDTO getProcedimento(int index){ while(getGuiaDeAtendimentoDTO().getListaDeProcedimentos().size() <= index){ getGuiaDeAtendimentoDTO().getListaDeProcedimentos().add(new ProcedimentoDTO()); } return getGuiaDeAtendimentoDTO().getListaDeProcedimentos().get(index); }valeu mesmo a força!
Obrigado a todos.
Nossa, como sou burro cara, aqui no meu método tava usando o get também, mas não coloquei por descuido :oops:
Anyway, que bom que funcionou!
E fico feliz por talvez tê-lo ajudado hehehe
Abraços!
não sei se te ajudei muito mas tamos aí!
falow fera
=)