Struts

3 respostas
Carlos_Renato_Doming

pessoal, alguém poderia me dar uma força?

Estou tentando montar uma combobox utilizando o

<html:select property=“codigo” name=“func”>
<html:optionsCollection name=“listafunc” />
</html:select>

e dá o erro abaixo

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Cannot create iterator for src.bean.Funcionario@1829c6b

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)

org.apache.jsp.login_jsp._jspService(login_jsp.java:93)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)

org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.JspException: Cannot create iterator for src.bean.Funcionario@1829c6b

org.apache.struts.taglib.html.OptionsTag.getIterator(OptionsTag.java:447)

org.apache.struts.taglib.html.OptionsTag.doEndTag(OptionsTag.java:289)

org.apache.jsp.login_jsp._jspx_meth_html_options_0(login_jsp.java:391)

org.apache.jsp.login_jsp._jspx_meth_html_select_0(login_jsp.java:364)

org.apache.jsp.login_jsp._jspx_meth_html_form_0(login_jsp.java:214)

org.apache.jsp.login_jsp._jspx_meth_html_html_0(login_jsp.java:119)

org.apache.jsp.login_jsp._jspService(login_jsp.java:84)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)

org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)

org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)

org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

note The full stack trace of the root cause is available in the Apache Tomcat/5.0.27 logs.

o meu action é este:

/*

  • Created on 12/07/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */
    package src.action;

import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import src.bean.Funcionario;

/**

  • @author Carlos

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class TesteAction extends Action {

    /* (non-Javadoc)

    • @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
      
      */
      
      public ActionForward execute(ActionMapping map, ActionForm form,
      
      HttpServletRequest req, HttpServletResponse res) throws Exception {
      
      // TODO Auto-generated method stub
      

      Collection aray = new ArrayList();
      Funcionario func = new Funcionario();

      func.setCodigo(“1”);
      func.setNome(“carlos”);

      aray.add(func);

      HttpSession session = req.getSession();

      session.setAttribute(“func”,func );
      session.setAttribute(“listafunc”,func );

      System.out.println(“Teste”);

      return map.findForward(“sucess”);
      }

}

e o meu Funcionariobean é

/*

  • Created on 12/07/2005
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */
    package src.bean;

/**

  • @author Carlos

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class Funcionario{

    String nomeFunc;
    String codigo;

    public void setCodigo(String pcodigo){
    
    codigo = pcodigo;	
    
    }
    
    public String getCodigo( ){
    
    return codigo;
    
    }
    
    public void setNome(String nome){
    
    nomeFunc = nome;	
    
    }
    
    public String getNome( ){
    
    return nomeFunc;
    
    }
    
    }
    

3 Respostas

debersom

Tente assim:

&lt;html:select property="codigo"&gt; 
    &lt;html:options collection="listafunc" property="codigo" labelProperty="nome"/&gt;
&lt;/html:select&gt;

E depois na sua action você pega o valor do código selecionado no combo, na sua form.

vivi_grieco

Vc está passando como atributo “listafunc” um objeto do tipo Funcionario: session.setAttribute("listafunc",func );
E na verdade vc teria q passar uma Collection, já q no seu JSP vc faz isso:

&lt;html:optionsCollection name="listafunc"   /&gt;

o html:optionsCollection, como o proprio nome diz, utiliza uma Collection.

Outra coisa… pra q vc utiliza essa Colelction na sua action:

Collection  aray = new ArrayList();

e vc apenas preenche ela, mas nao usa em lugar nenhum?

debersom

É verdade Viviane, nem tinha percebido :oops:
Além do que eu falei acima você precisa colocar o seu ArrayList na sessão e não o funcionário

session.setAttribute("listafunc",aray);

Corrija o código como acima e retire o resto

Criado 12 de julho de 2005
Ultima resposta 12 de jul. de 2005
Respostas 3
Participantes 3