SelectOneMenu erro de casting ao setar o valor no bean

9 respostas
T

Pessoal, por favor me ajudem.
Tenho um SelectOneMenu e quero pegar o valor dele…estou fazendo assim…me ajudem…

xhtml

Bairro: <h:selectOneMenu value="#{pizzariaTO.bairro}" tittle="Selecione seu bairro!">
                    					<f:selectItem itemLabel="Morumbi" value="morumbi"/>
                    					<f:selectItem itemLabel="Interlagos" value="interlagos"/>
                    					<f:selectItem itemLabel="Brooklin" value="brooklin"/>
                    				</h:selectOneMenu>
                    				<br/><br/>

Bean

public class PizzariaTO {

	private String nome;
	private String telefone;
	private String bairro;
	
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getBairro() {
		return bairro;
	}
	public void setBairro(String bairro) {
		this.bairro = bairro;
	}
}

O erro que está dando é:

exception 

javax.servlet.ServletException: java.lang.String cannot be cast to javax.faces.model.SelectItem
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:325)

Valeu galera

9 Respostas

T

substitui o atributo value por itemValue

C

Não é value… mas sim itemvalue…

Exemplo:

<f:selectItem itemLabel="Morumbi" itemValue="morumbi"/>

Falows…

T

Tiburcio e Carlos, valeu pela resposta.

O que acontece é o seguinte:

Eu acho que o que está errado é o <h:selectOneMenu value="#{pizzariaTO.bairro}" pois esta propriedade de Bean é String e precisava ser SelectItem certo? Se positivo, a questão é, como faço para passar um SelectItem para String.

Valeuu…

Abss

T

vc acha?

vc não vai ao menos testar a solução que foi passada?

T

Tiburcio, o erro que está dando é de conversão (casting) de SelectItem para String, por isso que falo que “ACHO” que não é isso, e também está aqui nesse site (http://www.roseindia.net/jsf/selectOneMenu.shtml) como referencia da onde tirei o comando.

Agradeço as respostas meu velho.

Testar eu vou, mas no momento não posso, estou no trabalho.

Valeu!!

ABss

T

o exemplo do roseIndia que vc viu esta assim:

<h:form> <h:selectOneMenu id="som" value="TableBean.perInfoAll" title="select any one in this menu"> <f:selectItem id="si1" itemLabel="Thums Up" itemValue="11" /> <f:selectItem id="si2" itemLabel="Limca" itemValue="22" /> <f:selectItem id="si3" itemLabel="Pepsi" itemValue="33" /> <f:selectItem id="si4" itemLabel="Sprite" itemValue="44" /> <f:selectItem id="si5" itemLabel="Frooti" itemValue="55" /> <f:selectItem id="si6" itemLabel="Coca-Cola" itemValue="66" /> </h:selectOneMenu>

esta itemValue não value.

O melhor é consultar a documentação oficial, que diz que a opção itemValue:

“Valor a ser devolvido para o servidor se essa opção for selecionada pelo usuário”.

o atributo value devolverá um objeto selectItem, por isso que da o seu erro.

aqui o link para vc consultar:

http://download.oracle.com/javaee/5/javaserverfaces/1.2/docs/tlddocs/

T

Muito Obrigado Tiburcio, eu verifiquei e vi que estava errado mesmo.

Agora chagamos no mesmo ponto, o que eu não estou conseguindo é fazer o casting. Na verdade eu não sei como faço, se coloco a pripriedade do meu Bean como selectItem e jogo para outra variavel covertendo ou se faço de outro jeito.

Valeuuuu…

Abs

T

mas cara, vc ta complicando,rsrs

no seu bean vc coloca uma String simples e vc usa o atributo itemValue no f:selectItem...

Bairro: <h:selectOneMenu value="#{pizzariaTO.bairro}" tittle="Selecione seu bairro!">  
                                        <f:selectItem itemLabel="Morumbi" itemValue="morumbi"/>  
                                        <f:selectItem itemLabel="Interlagos" itemValue="interlagos"/>  
                                        <f:selectItem itemLabel="Brooklin" itemValue="brooklin"/>  
                                    </h:selectOneMenu>  
                                    <br/><br/>

e o bean continua como vc postou:

public class PizzariaTO {  
  
    private String nome;  
    private String telefone;  
    private String bairro;  
      
    public String getNome() {  
        return nome;  
    }  
    public void setNome(String nome) {  
        this.nome = nome;  
    }  
    public String getTelefone() {  
        return telefone;  
    }  
    public void setTelefone(String telefone) {  
        this.telefone = telefone;  
    }  
    public String getBairro() {  
        return bairro;  
    }  
    public void setBairro(String bairro) {  
        this.bairro = bairro;  
    }  
}
T

Ahhhh…poxa…

O que eu achei que fosse era um erro de casting pq quando eu coloquei essa linha

Bairro: <h:selectOneMenu value="#{pizzariaTO.bairro}" tittle="Selecione seu bairro!">

No lugar do value eu teria que colocar uma variavel do tipo SelectItem e não String… mas se vc está falando que funciona com uma String e é só mudar para ItemValue, vou fazer hoje a noite e te passo.

Valeuuuu…

Absss

Criado 22 de setembro de 2010
Ultima resposta 23 de set. de 2010
Respostas 9
Participantes 3