Ajuda iterate

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

[quote=Zillo]Matraca, posta seu código aí …

Estou desenvolvendo um sistema com struts 1 e uso o iterate quem sabe posso te ajudar =)

Valew[/quote]

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.

[quote=Tchello] 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.[/quote]

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);  
	} 

[quote=Tchello] 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.[/quote]

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

[quote=Zillo]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[/quote]

Segue os códigos:

modelo:

[code]
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;
}

}[/code]

Action que retorna a lista:

[code]
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");
	
}

}[/code]

JSP:

[code]

[/code]

Mapeia o strust-config.xml:

<action-mappings> <action path="/consulta" type="ProcedimentoConsultaAction"> <forward name="ok" path="/procedimento.jsp"></forward> </action> </action-mappings>

Para gravar:

Action que captura os dados:

[code]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");
	
}

}[/code]

ActionForm:

[code]public class ProcedimentoForm extends ActionForm{

private Procedimento procedimento = new Procedimento();

public Procedimento getProcedimento(){
	return procedimento;
}

}[/code]

Mapeia o struts-config.xml:

[code]

<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>[/code]

Se não viajei, espero ter ajudado…

Abraço

[quote=Tchello] 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.[/quote]

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.

[quote=Zillo][quote=Zillo]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[/quote]

Segue os códigos:

modelo:

[code]
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;
}

}[/code]

Action que retorna a lista:

[code]
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");
	
}

}[/code]

JSP:

[code]

[/code]

Mapeia o strust-config.xml:

<action-mappings> <action path="/consulta" type="ProcedimentoConsultaAction"> <forward name="ok" path="/procedimento.jsp"></forward> </action> </action-mappings>

Para gravar:

Action que captura os dados:

[code]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");
	
}

}[/code]

ActionForm:

[code]public class ProcedimentoForm extends ActionForm{

private Procedimento procedimento = new Procedimento();

public Procedimento getProcedimento(){
	return procedimento;
}

}[/code]

Mapeia o struts-config.xml:

[code]

<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>[/code]

Se não viajei, espero ter ajudado…

Abraço
[/quote]

Consegui fazer funcionar aqui amigo,

muito obrigado!

:smiley:

[quote=matracaweb][quote=Tchello] 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.[/quote]

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.
[/quote]

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

=)