Struts: Como popular html:select

3 respostas
welbermacedo

Fala Galera,

Sou novo aqui no GUJ e estou com uma dúvida filha da mãe…
Já dei uma pesquisada em outros tópicos mas estou sem solução!

Estou tentando preencher um ComboBox numa página JSP utilizando Struts… estou fazendo o seguinte:

Na minha página JSP tenho:
(Esse html:select faz parte de um form para cadastro de contatos sendo utilizado para definir qual categoria o contato faz parte)

<html:select property="categoria.codigo">
  <html:option value="0">Selecione</html:option>
  <html:optionsCollection name="CategoriaForm" property="categoria.codigo" label="nome" value="codigo"/>
</html:select>

Na class CategoriaForm tenho:

public class CategoriaForm extends ActionForm{
    private CategoriaContatoModel categoria = new CategoriaContatoModel();
    
    public CategoriaContatoModel getCategoria(){
        return this.categoria;
    }

    public void setCategoria(CategoriaContatoModel categoria) {
        this.categoria = categoria;
    }
}

Na class CategoriaAction tenho:
(Se apenas exibir numa tabela, funciona!)

public class CategoriaAction extends DispatchAction {
    public ActionForward listar(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

        ClienteModel cliente = (ClienteModel) request.getSession().getAttribute("cliente");
        
        try{
            request.setAttribute("listaCategoria", ControlFacade.getInstancia().listarCategoria(cliente));
            return map.findForward("ok");
        }catch(Exception e){
            e.getMessage();
            return map.findForward("erro");
        }
    }
}

No struts-config tenho:

<action path="/painel/listarCategoria" parameter="operacao" type="br.com.ertsem.divulgar.struts.action.CategoriaAction" >
    <forward name="ok" path="/painel/entrada.jsp?id=contato" />
</action>

Quando rodo dá a seguinte Exception:

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot create iterator for 0
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

PS: Não se estou fazendo da forma correta para preencer o Combo… qualquer sujestão, exemplos e dicas são bem vindos!

3 Respostas

arqueiros

welbermacedo:
Fala Galera,

Sou novo aqui no GUJ e estou com uma dúvida filha da mãe…
Já dei uma pesquisada em outros tópicos mas estou sem solução!

Estou tentando preencher um ComboBox numa página JSP utilizando Struts… estou fazendo o seguinte:

Na minha página JSP tenho:
(Esse html:select faz parte de um form para cadastro de contatos sendo utilizado para definir qual categoria o contato faz parte)

<html:select property="categoria.codigo">
  <html:option value="0">Selecione</html:option>
  <html:optionsCollection name="CategoriaForm" property="categoria.codigo" label="nome" value="codigo"/>
</html:select>

Na class CategoriaForm tenho:

public class CategoriaForm extends ActionForm{
    private CategoriaContatoModel categoria = new CategoriaContatoModel();
    
    public CategoriaContatoModel getCategoria(){
        return this.categoria;
    }

    public void setCategoria(CategoriaContatoModel categoria) {
        this.categoria = categoria;
    }
}

Na class CategoriaAction tenho:
(Se apenas exibir numa tabela, funciona!)

public class CategoriaAction extends DispatchAction {
    public ActionForward listar(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {

        ClienteModel cliente = (ClienteModel) request.getSession().getAttribute("cliente");
        
        try{
            request.setAttribute("listaCategoria", ControlFacade.getInstancia().listarCategoria(cliente));
            return map.findForward("ok");
        }catch(Exception e){
            e.getMessage();
            return map.findForward("erro");
        }
    }
}

No struts-config tenho:

<action path="/painel/listarCategoria" parameter="operacao" type="br.com.ertsem.divulgar.struts.action.CategoriaAction" >
    <forward name="ok" path="/painel/entrada.jsp?id=contato" />
</action>

Quando rodo dá a seguinte Exception:

javax.servlet.ServletException: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.servlet.ServletException: javax.servlet.jsp.JspException: Cannot create iterator for 0
	org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:286)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

PS: Não se estou fazendo da forma correta para preencer o Combo… qualquer sujestão, exemplos e dicas são bem vindos!

Fera coloquei umas alterações que pode ser algo que esteja dando problema, mas não tenho certeza…e o fato de ter um form no html:select me parece um pouco estranho da uma olhada no link abaixo e ver se te ajuda de alguma forma…

http://javafree.uol.com.br/topic-5762-Usando-o-&lthtml-options-collection="">-do-Str.html

<form-beans type="org.apache.struts.action.ActionFormBean">
    <form-bean name="categoriaForm" type="br.com.ertsem.divulgar.struts.action.CategoriaForm" />
</form-beans>

<action path="/painel/listarCategoria" parameter="operacao" type="br.com.ertsem.divulgar.struts.action.CategoriaAction"
    name="categoriaForm" >
    <forward name="ok" path="/painel/entrada.jsp?id=contato" />
</action>

Abraços

welbermacedo

Grande arqueiros,
Dei uma olhada no link que me enviou e fiz alguns testes me orientando por tal mas ainda não consegui resolver essa questão.

Até consegui fazer não estourar mais o erro… mas o combo não está preenchendo.

Fiz o seguinte:
(Criei o objeto categoria como Collection no meu form e na action setei o beans com a Collection, conforme abaixo)

public class ContatoForm extends ActionForm{
    private ContatoModel contato = new ContatoModel();
    private List<CategoriaContatoModel> categoria = new ArrayList();

    public ContatoModel getContato(){
        return this.contato;
    }

    public void setContato(ContatoModel contato) {
        this.contato = contato;
    }

    public List<CategoriaContatoModel> getCategoria(){
        return this.categoria;
    }

    public void setCategoria(List<CategoriaContatoModel> categoria){
        this.categoria = categoria;
    }
}

ContatoAction:

public ActionForward cadastrar(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
        ContatoForm formContato = (ContatoForm) form;

        ContatoModel contato = formContato.getContato();
        CategoriaContatoModel categoria = formContato.getContato().getCategoria();
        ClienteModel cliente = (ClienteModel) request.getSession().getAttribute("cliente");

        contato.setCategoria((CategoriaContatoModel) categoria);
        contato.setCliente(cliente);

        try {
            ControlFacade.getInstancia().cadastrar(contato);
            return map.findForward("ok");
        } catch (Exception e) {
            e.getMessage();
            return map.findForward("erro");
        }
    }
}

e na JSP:

<html:select property="categoria">
    <html:option value="0">Selecione</html:option>
    <html:optionsCollection name="ContatoForm" property="categoria" label="nome" value="codigo"/>
</html:select>

Acho que está faltando alguma coisa, mão não consigo identificar o que!

Obrigado pela Ajuda.

Abraços

welbermacedo

Alguem consegue me ajudar, please? eheh

Criado 4 de março de 2010
Ultima resposta 9 de mar. de 2010
Respostas 3
Participantes 2