Selectonemenu, o pq do converte, e como criar?

nao to conseguindo pegar o valor do selecionado

<p:selectOneMenu value="#{grupoBean.grupoSelecionado}"  effect="drop" 
                                      style="margin-left: 48px;" converter="GruposConverter">  
                         <f:selectItem itemLabel="Selecione um grupo" itemValue="" />  
                         <f:selectItems value="#{grupoBean.listGrupos}" var="grupos" 
                                        itemLabel="#{grupos.nomeGrupo}" itemValue="#{grupos.idGrupos}" 
                                        /> 
                     </p:selectOneMenu>
                     <br/>
                     <p:commandButton value="Confirmar" type="submit" ajax="false"
                                      style="margin-top: 40px;margin-left: 117px;"
                                      actionListener="#{grupoBean.atualizarCompartilhamento}"/>  
==============================================================================
lista no bean

public List<Grupos> getListGrupos() throws IOException {
        
        listCombo();
        
        if (null == listGrupos) {
           
            listGrupos = new ArrayList<Grupos>();
        }
        
        GrupoPG grupos = new GrupoPG();
        UsuarioDaoPG uDao = new UsuarioDaoPG();
        UserBean uBean = new UserBean();
        
        String email = "";
        email = uBean.getRecuperarEmail();
        int idUsuario = uDao.retornaId(email);

        listGrupos = grupos.pesquisar(idUsuario);
        
     
                
        return listGrupos;
    }

Não duplique seus posts: http://www.guj.com.br/java/285258-erro-de-conversao-ao-definir-o-valor-entidadesgruposda5906-para-null-converter

Se o antigo ainda não tem a resposta que você deseja, espere algum tempo.

Passado algumas horas e ninguem respondeu, coloque alguma mensagem do tipo: “alguém?”

Duplicar posts é contra as regras do GUJ, sem falar que atrapalha quem vai pesquisar pelo assunto, pois irão aparecer diversos posts inacabados.

foi mal na sabia dessa regra… posso ter colocado de forma errada…minha duvida esta nesse converte nao entendi o pq criar ele, pq o prime nao consegue passar o texto como é por exemplo em um input

Object getAsObject,String getAsString o pq de criar dessas classes…

se puder ajudar nessa explicaçao ja me ajudava bastante vlw.

alguem??

Se eu não estiver enganado o Converter serve para transforma os dados da view em Object e vice-versa.

Acho mais simples você usar um value no seu selectOneMenu:
o que foi selecionado no combo é retornado o valor do itemValue="#{grupos.idGrupos}" para o value="#{grupoBean.idGrupo}" do selectOneMenu

<p:selectOneMenu value="#{grupoBean.grupoSelecionado}" effect="drop" value="#{grupoBean.idGrupo}" style="margin-left: 48px;"> <f:selectItem itemLabel="Selecione um grupo" itemValue="0" /> <f:selectItems value="#{grupoBean.listGrupos}" var="grupos" itemLabel="#{grupos.nomeGrupo}" itemValue="#{grupos.idGrupos}" /> </p:selectOneMenu> <br/> <p:commandButton value="Confirmar" type="submit" ajax="false" style="margin-top: 40px;margin-left: 117px;" actionListener="#{grupoBean.atualizarCompartilhamento}"/>

Caso queria o converter segue uma classe exemplo:

package converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.FacesConverter;
import to.Cidade;
import DAO.CidadeDAO;


@FacesConverter(value = "converterCidade")
public class ConverterCidade implements Converter {
	@Override

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		try {
			if (value != null && !value.equals("")) {
				CidadeDAO cidadeDAO = new CidadeDAO();
				return cidadeDAO.buscarCidadePorCodigo((Integer.parseInt(value)));
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override

	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value instanceof Cidade) {
			Cidade cidade = (Cidade) value;
			return String.valueOf(cidade.getCodigo());
		}
		return "";
	}
}

dois value??

<p:selectOneMenu value="#{grupoBean.grupoSelecionado}"  effect="drop"  value="#{grupoBean.idGrupo}"

sobre os metodos do converte tipo

try {  
            if (value != null && !value.equals("")) {  
                CidadeDAO cidadeDAO = new CidadeDAO();  
                return cidadeDAO.buscarCidadePorCodigo((Integer.parseInt(value)));  //recebe a string e retorna o id da cidade??
            }  

hahaha foi mal…esqueci de editar essa parte.
esquece o value="#{grupoBean.grupoSelecionado}".
A ideia é o combo retornar a id e no seu bean vc buscar o grupo pelo codigo capturado.

Esse método recebe a Id(Integer.parseInt(value) porque o value vem como String e o Id do meu Estado é Integer) e retorna um Objeto do tipo Estado.

[quote][code]
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
if (value != null && !value.equals("")) {
EstadoDAO estadoDAO = new EstadoDAO();
return estadoDAO.buscarEstadoPorCodigo((Integer.parseInt(value)));
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

[/code][/quote]

O Converter serve para você trabalhar com objetos, ao invés de Strings. (Pelo menos é assim que eu penso =D)
Basicamente, você cria uma classe que implementa a javax.faces.convert.Converter e nessa classe, você implementa dois métodos, um para converter de String para Object ( getAsObject() ) e outro para converter de Object para String ( getAsString() ).

Seria mais ou menos assim:

FacesConverter("Converter")
public class Converter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {

		//Aqui você pega o String Value, que é o valor que está no itemValue do seu selectOneMenu, normalmente, você passa o ID, ai você puxa o objeto que quer pelo ID.
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		
              //Aqui você converte de Object para String.
}

Um exemplo de Converter seria:


@FacesConverter("Converter")
public class Converter implements Converter {

	@Override
	public Object getAsObject(FacesContext context, UIComponent component, String value) {

		GrupoFacadeRemote grupoFacade = null;

		try {

			grupoFacade = context.getApplication().evaluateExpressionGet(context, "#{grupoFuncionarioMBHelper}", GrupoManagedBeanHelper.class).getGrupoFacade();

			return grupoFacade.selecionar(Integer.parseInt(value));

		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if (value == null) {
			return null;
		}
		
		return String.valueOf(((Grupo) value).getId());
	}
}

Outra coisa, acho que se você implementar seu Converter como mostrei e no seu selectOneMenu deixar:

<f:selectItem itemLabel=“Selecione um grupo” itemValue=“0” />
<f:selectItems value="#{grupoBean.listGrupos}" var=“grupos” itemLabel="#{grupos.nomeGrupo}" itemValue="#{grupos.idGrupos}" />

Vai dar alguma coisa errada pelo itemValue ser 0, a não ser que você trate esse 0 no converter.

Boa sorte.

obrigado pela ajuda…

mais por exemplo, nao sei c eu to viajando ai com isso rsrs… por exemplo tenho minha lista la

selecione um -->
grupo 1
grupo 2
grupo 3

eu somente qro pegar esse grupo tipo ‘grupo 1’ ai faço o

select grupoid (o retorno do combo) e pego id e por ai vai…

se eu tiver 10 combos de diferentes tipos…terei que fazer 10 convertes???

Se você tiver por 10 desses &lt;p:selectOneMenu value="#{grupoBean.grupoSelecionado}" effect="drop" value="#{grupoBean.idGrupo}" .../&gt;

E eles forem de tipos diferentes, por exemplo, um selectOneMenu do tipo Grupo, outro selectOneMenu do tipo Funcionario, etc … você vai ter que fazer 10 converters.
Agora se forem de tipos iguais, um converter apenas.

O converter ajuda você a não ter que fazer lógicas especiais para cada selectOneMenu, já que você vai trabalhar apenas com objetos.