<html:select.....> sempre mostra o primeiro item

Pessoal criei um <html:select> ele está exibindo os itens corretos, quando seleciono e mando para o Servlet o valor está indo o correto está persistindo e tudo mais certinho! Mas quando volto para a pagina quando quero editar o registro ele nao está posicionando no item correto, sempre permanece no primeiro da lista do combo…


&lt;html:select property="parentesco" name="meuParceiro" &gt;
&lt;html:options collection="listaParentescos" property="codigoParentesco" labelProperty="descricaoParentesco"/&gt;
&lt;/html:select&gt;

Use assim:

&lt;html:select property="parentesco" name="meuParceiro"&gt; &lt;html:optionsCollection name="listaParentescos" property="codigoParentesco" label="descricaoParentesco" value="descricaoParentesco"/&gt; &lt;/html:select&gt;

Bom eu tentei usar esse codigo que voce me passo, mais eu estou tendo problema… e não to conseguindo achar o problema…

No meu Action eu estou mandando para pagina essa maneira:

ParceiroDAO parceiroDAO = ParceiroDAO.getInstance();
Parceiro parceiro = (Parceiro) parceiroDAO.procurar(Long.valueOf(request.getParameter("codigoParceiro")));
		
ServiceBroker broker = new ServiceBroker();	
Collection parentescos = broker.listarTodosParentescos();	
				
		
request.setAttribute("listaParentescos", parentescos);
request.setAttribute("meuParceiro", parceiro);
		
return mapping.findForward("success");

HTTP Status 500 -


type Exception report

message

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

exception

javax.servlet.ServletException: No getter method for property codigoParentesco of bean listaParentescos
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
org.apache.jsp.pages.editarParceiro_jsp._jspService(editarParceiro_jsp.java:134)
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:1056)
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

root cause

javax.servlet.jsp.JspException: No getter method for property codigoParentesco of bean listaParentescos
org.apache.struts.taglib.TagUtils.lookup(TagUtils.java:1031)
org.apache.struts.taglib.html.OptionsCollectionTag.doStartTag(OptionsCollectionTag.java:175)
org.apache.jsp.pages.editarParceiro_jsp._jspx_meth_html_optionsCollection_0(editarParceiro_jsp.java:469)
org.apache.jsp.pages.editarParceiro_jsp._jspx_meth_html_select_1(editarParceiro_jsp.java:440)
org.apache.jsp.pages.editarParceiro_jsp._jspx_meth_html_form_0(editarParceiro_jsp.java:226)
org.apache.jsp.pages.editarParceiro_jsp._jspService(editarParceiro_jsp.java:118)
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:1056)
org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:261)
org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:388)
org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:316)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:231)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
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.


Apache Tomcat/5.0.27

O seu bean não possui o método getCodigoParentesco().

Bem eu tenho meu JavaBean chamado “parceiros” que possui os métodos Get/Set para as duas colunas da tabela, nesse meu código abaixo eu mando para a pagina esse meu Collection que se eu nao estiver errado deve possuir uma coleção :slight_smile: com com codigoParentesco e descricaoParentesco.

ServiceBroker broker = new ServiceBroker();	
Collection parentescos = broker.listarTodosParentescos();	
request.setAttribute("listaParentescos", parentescos);

ele reclama que o “listaParentescos” nao possui os metodos Get/Set como eu vo implementa isso nesse bean que ta sendo criado ali ? ou eu to viajando… rs…

valeu pela força!

Já sei o erro. Tenta aí:

&lt;html:optionsCollection property="listaParentescos" label="codigoParentesco" /&gt;

Eae Daniel tudo blz, estou tendo o problema ainda… nao consegui resolver…

Essa é a tag q estou usando no JSP:

&lt;html:select property="parentesco" name="meuParceiro" &gt;
   &lt;html:optionsCollection property="listaParentescos" label="codigoParentesco" /&gt;
&lt;/html:select&gt;

Meu JavaBean Parentesco:

package br.com.controle.parentesco.bean;

import java.io.Serializable;

public class Parentesco implements Serializable {
	
	private Long codigoParentesco;
	private String descricaoParentesco;

	public Long getCodigoParentesco() {
		return codigoParentesco;
	}
	
	public void setCodigoParentesco(Long codigoParentesco) {
		this.codigoParentesco = codigoParentesco;
	}
	
	public String getDescricaoParentesco() {
		return descricaoParentesco;
	}
	
	public void setDescricaoParentesco(String descricaoParentesco) {
		this.descricaoParentesco = descricaoParentesco;
	}
}

Meu JavaBean Parceiro:

package br.com.controle.parceiro.bean;

import java.io.Serializable;
import java.sql.Date;
import br.com.controle.parentesco.bean.Parentesco;

public class Parceiro implements Serializable {

	private Long codigoParceiro;
	private String nomeCompleto;
	private String nomeReduzido;
	private Date dataNascimento;
	private Double valorSalario;
	private String observacaoParceiro;
	private Parentesco parentesco;

	public Date getDataNascimento() {
		return dataNascimento;
	}
	
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
		
	public Double getValorSalario() {
		return valorSalario;
	}
	
	public void setValorSalario(Double valorSalario) {
		this.valorSalario = valorSalario;
	}
	
	public Long getCodigoParceiro() {
		return codigoParceiro;
	}
	
	public void setCodigoParceiro(Long codigoParceiro) {
		this.codigoParceiro = codigoParceiro;
	}
	
	public String getNomeCompleto() {
		return nomeCompleto;
	}
	
	public void setNomeCompleto(String nomeCompleto) {
		this.nomeCompleto = nomeCompleto;
	}
	
	public String getNomeReduzido() {
		return nomeReduzido;
	}
	
	public void setNomeReduzido(String nomeReduzido) {
		this.nomeReduzido = nomeReduzido;
	}

	
	public String getObservacaoParceiro() {
		return observacaoParceiro;
	}
	
	public void setObservacaoParceiro(String observacaoParceiro) {
		this.observacaoParceiro = observacaoParceiro;
	}
	
	public Parentesco getParentesco() {
		return parentesco;
	}
	
	public void setParentesco(Parentesco parentesco) {
		this.parentesco = parentesco;
	}
}

Meu Action que chama a pagina:

package br.com.controle.parceiro.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.controle.parceiro.dao.ParceiroDAO;
import br.com.controle.parentesco.dao.ParentescoDAO;
import br.com.controle.parceiro.bean.Parceiro;
import br.com.controle.uteis.ServiceBroker;

import java.util.Collection;

public class ParceiroAction extends DispatchAction {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		
		ParceiroDAO parceiroDAO = ParceiroDAO.getInstance();
		Parceiro parceiro = (Parceiro) parceiroDAO.procurar(Long.valueOf(request.getParameter("codigoParceiro")));	
		Collection parentescos = ParentescoDAO.getInstance().listaTodos();	
		
		request.setAttribute("listaParentescos", parentescos);
		request.setAttribute("meuParceiro", parceiro);
		
		return mapping.findForward("success");
	}	
}

Estou usando o seguinte método para gerar o Collection

    protected java.util.Collection listaTodos(Class classRef, Criterion[] criterions) throws DAOException {
    
    try {
    	Session session = ConnectionFactory.getInstance().getSession();
        Criteria crit = session.createCriteria(classRef);
        if (criterions != null) {
            for(int i=0; i < criterions.length; i++)
                crit.add(criterions[i]);
        }
        java.util.Collection c = crit.list();
        session.close();            
        return c;
    }catch(HibernateException e) {
    	throw new DAOException(e);
    }

Implemento minha Collection assim:

public java.util.Collection listaTodos() throws DAOException {
   return listaTodos(Parentesco.class, null);
}	

Tenta assim:

&lt;html:select property="parentesco"&gt; &lt;html:optionsCollection name="listaParentescos" label="codigoParentesco" /&gt; &lt;/html:select&gt;

Deu, certo?

alterei e ele mudo o erro…

javax.servlet.ServletException: No getter method available for property value for bean under name br.com.controle.parentesco.bean.Parentesco@1439bd9

Bom eu adicionei a propriedade value e agora funciono :slight_smile: nossa q luta em! valeu mesmo Daniel! passa a conta p/ eu depositar! rs…

Pode tirar uma duvida… esse Select nao precisa fazer parte do meu meuParceiro ? quando eu for dar um submit…

Você precisará ter o atributo “parentesco” no seu Form Bean.

bom funcino legal cara ele tá persistindo direito! mais oq eu mais queria nao ta rolando q era ele ficar com o item selected… ele ta carrengando e deixando o bendito item numero 1 como ativo sempre…

Meu código no final está assim:

&lt;html:select property="parentesco" name="meuParceiro"&gt;
 &lt;html:optionsCollection name="listaParentescos" label="descricaoParentesco" value="codigoParentesco" /&gt;
&lt;/html:select&gt;

O que deve estar acontecendo é que o valor selecionado não está chegando até à página.

como vc está usando isso

request.setAttribute(“listaParentescos”, parentescos);

e vc disse tb que ele está persistindo, (imaginei que em outra action ou outro metodo da action), talvez os valores realmente não estajam chegando na página…

Tenta faze assim :

session.setAttribute(“listaParentescos”, parentescos);

Mesmo ele populando corretamente os item e persistindo ainda pode ocorrer isso dele nao estar recebendo o valor correto ? pode me dar uma dica de oq pode estar ocorrendo…

valeuuuu

O que eu faço é setar os beans na sessão…

como no exemplo anteriormente enviado

Pois se vc usar com request, deverá recupera-lo e setar novamente em cada action que seu formulario passar ( inserção, select, e outros…)

pois os parametros do request chegam apenas à próxima action

Eae eu fiz a alteração que você me falo olha só como fico meu Servlet:

package br.com.controle.parceiro.action;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import br.com.controle.parceiro.dao.ParceiroDAO;
import br.com.controle.parentesco.dao.ParentescoDAO;
import br.com.controle.parceiro.bean.Parceiro;

import java.util.Collection;

public class ParceiroAction extends DispatchAction {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {

		HttpSession session = request.getSession(); 		
		
		Parceiro parceiro = (Parceiro) ParceiroDAO.getInstance().procurar(Long.valueOf(request.getParameter("codigoParceiro")));
		Collection parentescos = ParentescoDAO.getInstance().listaTodos();	
		
		session.setAttribute("meuParceiro", parceiro);
		session.setAttribute("listaParentescos", parentescos);
		
		return mapping.findForward("success");
	}	
}

Também alterei o Action que chama:

	    &lt;action path="/editarParceiro" 
		        type="br.com.controle.parceiro.action.ParceiroAction" 
				name="parceiroForm" 
				scope="session" 
				validate="false"&gt;
           &lt;forward name="success" path="/pages/editarParceiro.jsp" /&gt;
         &lt;/action&gt;

Na minha pagina JSP está declarado o selectOption da seguinte maneira:

&lt;html:select property="parentesco" name="meuParceiro"&gt;
  &lt;html:optionsCollection name="listaParentescos" label="descricaoParentesco" value="codigoParentesco" /&gt;
&lt;/html:select&gt;

Acompenhei a discussão neste topico mas não consegui resolver meu problema, se puder me ajudar. Eu tô tentando preencher um select com uma collection.

Meu erro:
No getter method available for property modelo for bean under name org.apache.struts.taglib.html.BEAN

Meu jsp:
<html:select property=“modelo”>
<html:options collection=“MODELO” property=“codModelo” labelProperty=“desModelo”/>
</html:select>

Minha classe:
DAOSisconapOraFacade dao = new DAOSisconapOraFacade();
Collection c = dao.selecionar(ModeloDAOOra.selecionarModeloPorFiltro, modeloVO);
request.getSession().setAttribute(“MODELO”, c);

Use assim:

&lt;html:optionsCollection name="MODELO" property="codModelo" label="desModelo" value="desModelo" /&gt; 

E não seria melhor colocar no Request do que no Session?

Daniel, grato pela sua atenção.
Fiz como você falou, mas o erro continua. :cry:

erro:
No getter method available for property modelo for bean under name org.apache.struts.taglib.html.BEAN