Jsf seleção sem converter

Boa tarde pessoal estou trabalhando com jsf 2.0 e alguns componentes de seleção como h:selectManyCheckbox. E não gostaria de usar Converters, por isso estou tentando passar o objeto inteiro para o valor do componente, porem não esta setando o valor. Estou fando da seguinte forma:

@ManagedBean
@SessionScoped
public class Mbean {
    private List<Pessoa> p;
    private List<Pessoa> lp = new ArrayList<Pessoa>();

    public Mbean() {
        lp.add(new Pessoa("Pessoa 1", "Sobrenome 1", 180));//Nome, Sobrenome, Altura 
        lp.add(new Pessoa("Pessoa 2", "Sobrenome 2", 175));
    }

   //gets e sets

    public void teste() {
        List<Pessoa> teste = (List<Pessoa>)p;//Aqui tem um break point sob pra ver se funciona
    }
         <h:selectManyCheckbox  label="Pessoa" value="#{mbean.p}">
                 <f:selectItems value="#{mbean.lp}" var="pe" itemLabel="#{pe.nome}" itemValue="#{pe}"/>
         </h:selectManyCheckbox>
         <p:commandButton value="Teste" action="#{mbean.teste}"/>

Alguém sabe porque o valor na esta sendo atribuído?

E o que estaria dando errado?

Bem eu seleciono os itens h:selectManyCheckbox e depois clico no botão que eu criei para teste, quando eu vejo o os valores da lista List p os valores contidos nelas são Strings com valores assim “Pessoa@9a4780”. Ele não deveria vir o objeto montado certinho?

Na verdade, você nem precisa definir o itemLabel e o itemValue. Basta que você sobrescreva o método toString dentro da classe Pessoa e coloque neme a saída do que quer que seja exibido na combo.

public class Pessoa{
   //atributos
   //getters e setters
   @Override
   public String toString(){
        //return getNome() + " " + getIdade();
        return "O que quer que apareça na label";
   }
}

Entendeu?

drsmachado obrigado pela sugestão, mas não é bem isso que estou querendo fazer. desta forma sobrescrevendo o toString() ele só retorna o nome ou a String que eu definir e na realidade eu quero pega o objeto todo.

Você fez o que eu disse?
Imagine que você tem uma classe chamada Olho. Cada olho tem um lado (String) e uma cor (String).

public class Olho{
    private String lado;
    private String cor;
    public Olho(String lado, String cor){
        this.lado = lado;
        this.cor = cor;
    }
    //getters e setters
    public String toString(){
        return lado + " " + cor;
    }
}

Agora, imagine que você precisa colocar na tua página a opção de seleção de um objeto olho. Para isto, vai precisar criar ao menos 1 para cada lado e cada cor diferente (preto, castanho, verde, azul), ou seja, um total de 8 combinações

...
Olho olho1 = new Olho('D', 'Preto');
Olho olho2 = new Olho('D', 'Castanho');
Olho olho3 = new Olho('D', 'Azul');
Olho olho4 = new Olho('D', 'Verde');
Olho olho5 = new Olho('E', 'Preto');
Olho olho6 = new Olho('E', 'Castanho');
Olho olho7 = new Olho('E', 'Azul');
Olho olho8 = new Olho('E', 'Verde');
listaOlho.add(olho1);
listaOlho.add(olho2);
listaOlho.add(olho3);
listaOlho.add(olho4);
listaOlho.add(olho5);
listaOlho.add(olho6);
listaOlho.add(olho7);
listaOlho.add(olho8);

Ok, para colocar a lista no xhtml

<h:selectOneMenu value="#{corpoBean.olhoSel}">
    <f:selectItems value="#{corpoBean.listaOlho}"/>
</h:selectOneMenu>

Veja que, a saída gerada será algo como

D Preto
D Castanho
D Azul
D Verde
E Preto
E Castanho
E Azul
E Verde

Ao selecionar, o objeto referente à opção selecionada será devolvido ao managedBean, sem precisar do converter.

Um exemplo mais real.
Tenho uma aplicação que possui um enum chamado Situacao

package br.com.czar.confin.enums;

public enum Situacao {
	A_VENCER("A vencer"){
		@Override
		public String toString() {
			return this.getDescSituacao();
		}
	},
	PAGA("Paga"){
		@Override
		public String toString() {
			return this.getDescSituacao();
		}
	},
	EM_ATRASO("Em Atraso"){
		@Override
		public String toString() {
			return this.getDescSituacao();
		}
	},
	CANCELADA("Cancelada"){
		@Override
		public String toString() {
			return this.getDescSituacao();
		}
	},
	PROTESTADA("Protestada"){
		@Override
		public String toString() {
			return this.getDescSituacao();
		}
	};
	
	private String descSituacao;
	
	private Situacao(final String descSituacao){
		setDescSituacao(descSituacao);
	}
	
	public String getDescSituacao() {
		return descSituacao;
	}
	
	public void setDescSituacao(String descSituacao) {
		this.descSituacao = descSituacao;
	}
}

Um managedBean chamado DespesaBean

private List<Situacao> sits;
...
for (Situacao s : Situacao.values()) {
	sits.add(s);
}
...

Como pode notar, o MB possui uma List que preencho para exibir, na xhtml, a lista com opções de Situacao existentes.

<p:selectOneMenu value= "#{despesaBean.despesa.situacao}">
					<f:selectItem itemValue="" itemLabel="#{msg.selecione}"/>
					<f:selectItems value="#{despesaBean.sits}" var="sit" itemLabel="#{sit.descSituacao}"/>
				</p:selectOneMenu>

E, como pode ver, quando seleciono uma Situacao, ela não possui nenhum converter.

public class Despesa extends ClassePersistence {
	private static final long serialVersionUID = 9071518405999987643L;
	private String nome;
	private Periodicidade periodicidade;
	private String origem;
	private Date anoMesReferencia;
	private Date dataPrevisaoRec;
	private Situacao situacao;

Entendeu?

Obrigado pela ajuda. Mas então eu fiz o que você sugeriu e funcionou, porem não é exatamente o que eu quero, eu quero que seja retornada uma lista de objetos no caso do seu exemplo uma lista de objetos Olho, não uma String D Preto.

Creio que você vai precisar implementar tua própria lista e, por alguma razão, ela não poderá ser serializável…
Coisa bem complexa, visto que a interface List é um Serializable.