The class 'java.lang.String' does not have the property 'codigo' [RESOLVIDO]

Feras,

estou querendo passar o valor selecionado de um p:selectOneMenu mas esta dando o erro de The class ‘java.lang.String’ does not have the property ‘codigo’ acredito que preciso implementar um conversor mas mesmo assim esta com o erro

<p:selectOneMenu value="#{paramMbean.relatorios}" id="idRelatorio" style="width:200px" converter="paramConverter" valueChangeListener="#{paramDelegate.carregarComboElementos}">    
	<f:selectItem itemLabel="Selecione o Relatório" itemValue="0"/>
	<f:selectItems value="#{paramMbean.listaRelatorios}" var="param" itemValue="#{param}" itemLabel="#{param.codRelPay}" />
	<f:ajax render="idElemento" event="change"  />
</p:selectOneMenu>

Tem certeza que o erro é nesse trecho que vc colou? Não tem nenhuma propriedade “codigo” sendo acessada.

eu escrevi ‘codigo’ mas e referenciando o trecho itemLabel="#{param.codRelPay}"

Qual seria o tipo de #{paramMbean.listaRelatorios}?

Isso e uma lista de objetos…Consegui resolver isso, mas o problema e que tenho 2 combos,

a segunda combo exibe os valores de acordo que for escolhida na primeira, o problema que a minha segunda combo esta exibindo o objeto

e não o valor o que tenho que fazer ?

<f:selectItems value="#{parametrizacaoMbean.listaElementos}"  >	

Você sobrescreveu o método toString da classe que quer exibir?

Nao…

Então sobrescreva :slight_smile:

se eu entendi sua descrição do problema, isso deve resolver.

Fera,

na vdd estou fazendo um loop e consigo em modo debug ver o valor do meu Objeto conforme preciso

			for(ParamConfElemRelpayTO elemRelpayTO: listaElementos){
				
				elemRelpay = new ParamConfElemRelpayTO();
				elemRelpay.setNomeElemento(elemRelpayTO.getNomeElemento());
				elemRelpay.setCodTipoPlano(elemRelpayTO.getCodTipoPlano());
				elemRelpay.setCodTipoParcelado(elemRelpayTO.getCodTipoParcelado());
				elemRelpay.setCodTipoValor(elemRelpayTO.getCodTipoValor());
				
					if(elemRelpay.getNomeElemento() != null){
						listaStrElementos.add(elemRelpay);
						parametrizacaoMbean.setListaElementos(listaStrElementos);
					}else{
						System.out.println("Não tem elemento irá fazer outra consulta no BD com as demais informações");
					}
				}

e na combo esta assim:

<p:selectOneMenu id="idElemento" value="#{parametrizacaoMbean.elemento}" disabled="#{parametrizacaoMbean.elemRelpayTO.codRelPay == 0 || parametrizacaoMbean.elemRelpayTO.codRelPay == null}" style="width:200px" converter="parametrizacaoConverter">
			            <f:selectItem itemLabel="Selecione o Elemento" itemValue="0" />
						<f:selectItems value="#{parametrizacaoMbean.listaElementos}"  />
			        </p:selectOneMenu>

mas continua exibindo o objeto e não o valor do “elemento”

Você chegou a tentar implementar o que eu sugeri?

como fica da forma que vc falou ?

Você implementa o método toString da classe em questão para retornar os dados que você quer que sejam exibidos

Na classe onde eu tenho

			for(ParamConfElemRelpayTO elemRelpayTO: listaElementos){
				
				elemRelpay = new ParamConfElemRelpayTO();
				elemRelpay.setNomeElemento(elemRelpayTO.getNomeElemento());
				elemRelpay.setCodTipoPlano(elemRelpayTO.getCodTipoPlano());
				elemRelpay.setCodTipoParcelado(elemRelpayTO.getCodTipoParcelado());
				elemRelpay.setCodTipoValor(elemRelpayTO.getCodTipoValor());
				
					if(elemRelpay.getNomeElemento() != null){
						listaStrElementos.add(elemRelpay);
						parametrizacaoMbean.setListaElementos(listaStrElementos);
					}else{
						System.out.println("Elemento Sem nome");
					}
				}

Basta acrescentar isso abaixo ?

	@Override
	public String toString() {
		return listaStrElementos.toString();
	}

Você tem que implementar o toString na classe ParamConfElemRelpayTO

Valeu cara deu certo…

ridículo isso mas estava tendo problemas

coloquei o método na classe que vc citou e funfo

	@Override
	public String toString() {
		return this.nomeElemento;
	}

Só a título de informação, você também pode usar as tags itemValue e itemLabel caso seja melhor do que sobrescrever o toString