Ajuda iterate

11 respostas
M

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?

11 Respostas

Z

Matraca, posta seu código aí …

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

Valew

M

Zillo:
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…

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.

M

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.

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

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.

Outro detalhe,

ele nem ta passando pelo método…

;/

Z

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

Z
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

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;
	}
}
Action que retorna a lista:
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");
		
	}

}
JSP:
<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>
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:
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");
		
	}

}
ActionForm:
public class ProcedimentoForm extends ActionForm{
	
	private Procedimento procedimento = new Procedimento();
	
	public Procedimento getProcedimento(){
		return procedimento;
	}

}
Mapeia o struts-config.xml:
<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

M

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.

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.

M
Zillo:
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

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;
	}
}
Action que retorna a lista:
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");
		
	}

}
JSP:
<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>
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:
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");
		
	}

}
ActionForm:
public class ProcedimentoForm extends ActionForm{
	
	private Procedimento procedimento = new Procedimento();
	
	public Procedimento getProcedimento(){
		return procedimento;
	}

}
Mapeia o struts-config.xml:
<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

Tchello

matracaweb:
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.

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!

Z

não sei se te ajudei muito mas tamos aí!

falow fera

=)

Criado 21 de fevereiro de 2010
Ultima resposta 22 de fev. de 2010
Respostas 11
Participantes 3