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

23 respostas
smorigo

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;

23 Respostas

danieldestro

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;

smorigo

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

danieldestro

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

smorigo

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!

danieldestro

Já sei o erro. Tenta aí:

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

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

Tenta assim:

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

Deu, certo?

smorigo

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

smorigo

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…

danieldestro

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

smorigo

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;
danieldestro

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

E

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

A

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

E

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

smorigo

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

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);
danieldestro

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?

M

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

M

Parece que o erro é no PROPERTY do SELECT que é igual a modelo.

A

Estou precisando implementar algo parecido, antes de tentar implementar no próprio sistema, criei um projetinho no Struts de exemplo para tentar fazer e estou com problemas. Segue abaixo alguns códigos
MyModel - Possui Apenas um Atributo chamado nome

public class MyModel implements Serializable {
    private String nome;
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
}

MyJavaBean - Poderia entender ele como um bean que será persistido no banco de dados, ele possui o atrituto MyModel

public class MyJavaBean implements Serializable {
    private MyModel myModel;
    public MyModel getMyModel() {
        return myModel;
    }
    public void setMyModel(MyModel myModel) {
        this.myModel = myModel;
    }
}

TesteForm é a classe do meu ActionForm, ela possui o atributo MyModel

public class TesteForm extends ActionForm {
    private MyModel myModel;
    public MyModel getMyModel() {
        return myModel;
    }
    public void setMyModel(MyModel myModel) {
        this.myModel = myModel;
    }
}

E por fim minha Action do Struts, aqui eu adicionei os valores na mão, pois são apenas testes.

public class TesteAction extends Action {
    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
        TesteForm testeForm = (TesteForm) form;
        ArrayList arrayList = new ArrayList();
        MyModel myModel;
        myModel = new MyModel();
        myModel.setNome("Alex");
        arrayList.add(myModel);
        testeForm.setMyModel(myModel);
        myModel = new MyModel();
        myModel.setNome("Fernando");
        arrayList.add(myModel);
        myModel = new MyModel();
        myModel.setNome("Priscila");
        arrayList.add(myModel);
        myModel = new MyModel();
        myModel.setNome("Thaís");
        arrayList.add(myModel);        
        request.setAttribute("arrayList",arrayList);       
        return mapping.findForward("success");
    }
}

Da pra ver que eu vou criando os MyModel e jogando em um ArrayList, no final eu jogo o ArrayList no Request. O primeiro MyModel eu adicionei no ActionForm.

Dentro do JSP o código está assim

&lt;html:form action="/teste"&gt;
    		&lt;html:select property="myModel"&gt;
    			&lt;html:optionsCollection name="arrayList" property="myModel.nome"/&gt;
    		&lt;/html:select&gt;
    	&lt;/html:form&gt;

Mas sempre recebo a mensagem de erro
No getter method for property myModel.nome of bean arrayList

Alguem poderia me ajudar?
Já fiz várias coisas mada nada funcionou…

Obrigado

danieldestro

Faça apenas isso:

<html:optionsCollection name=“arrayList” property=“nome”/>

M

Aí pessoALL,

Valeu pela ajuda o meu funcionou dessa forma:

<html:select property=“desModelo” name=“aparelhoForm”>
<html:options collection =“MODELO” property=“codModelo” labelProperty=“desModelo”/>
</html:select>

Aonde:
desModelo e codModelo são atributos do meu Form;
MODELO é a minha collection recuparada da session e
aparelhoForm está mapeado no struts-config.xml dessa forma:

Criado 27 de novembro de 2004
Ultima resposta 3 de jan. de 2005
Respostas 23
Participantes 6