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
[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!
[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
=)