JSF - Problema com selectOneMenu [RESOLVIDO]

2 respostas
honjoya

Galera estou tendo problema com validação quando utilizo o componete h:selectOneMenu.

Abaixo segue o código da view… quando seleciono o estado ele faz a conversão para um objeto Estado… atualizo o select com cidades que estão em instituicao.estadoSelected.cidades
porem ao submeter o form da o seguinte erro :

select_cidades: Erro de validação: o valor não é válidoselect_cidades: Erro de validação: o valor não é válido

já sobrescrevi hash e o equals… da classe Estado e da classe Cidade… porem continua com erro somente na list de cidade.

view

<p:dialog widgetVar="addEndereco" resizable="false" width="500" header="Novo Endereco">
                    <p:panel>
                        <h:form prependId="false">
                            <h:panelGrid columns="2" id="box_endereco">
                                <h:outputLabel value="Endereco"/>
                                <h:inputText id="endereco" value="#{instituicao.endereco.endereco}" required="true" requiredMessage="Endereço Obrigatório"/>
                                <h:outputText value="Numero"/>
                                <h:inputText id="numero" value="#{instituicao.endereco.numero}" required="true" requiredMessage="Numero Obrigatório"/>
                                <h:outputText value="Bairro"/>
                                <h:inputText id="bairro" value="#{instituicao.endereco.bairro}" required="true" requiredMessage="Bairro Obrigatório"/>
                                <h:outputText value="Estados"/>
                                <h:selectOneMenu value="#{instituicao.estadoSelected}">
                                    <f:selectItems var="state" value="#{instituicao.estados}"  itemValue="#{state.id}" itemLabel="#{state.nome}"/>
                                    <f:converter converterId="estado"/>
                                    <p:ajax update="select_cidades" />
                                </h:selectOneMenu>
                                
                                <h:outputText value="Cidade"/>
                                <h:selectOneMenu id="select_cidades"  valueChangeListener="#{instituicao.cidadeSelected}" converter="cidade">
                                    <f:selectItems var="city" value="#{instituicao.estadoSelected.cidades}"  itemValue="#{city.id}" itemLabel="#{city.nome}"/>
                                </h:selectOneMenu>
                            </h:panelGrid>
                            <p:commandButton value="Salvar" image="ui-icon ui-icon-disk" action="#{instituicao.saveEndereco()}" ajax="false"/>
                        </h:form>     
                    </p:panel>
                </p:dialog>
  • conversor
public class CidadeConverter implements Converter {

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

        Cidade cidade = CidadeDao.getCidade(new Long(value));
        return cidade;
        
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null) {
            return null;
        } else {
            return String.valueOf(value.hashCode());
        }
    }
}
  • classe Cidade
    obs: no equals eu retornei true para ver se conseguia eliminar o erro.
public class Cidade {

    private long id;
    private String nome;
    private Estado estado = new Estado();

    public Estado getEstado() {
        return estado;
    }

    public void setEstado(Estado estado) {
        this.estado = estado;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    @Override
    public boolean equals(Object obj) {    
        return true;
    }

    @Override
    public int hashCode() {
        return (int) this.id;
    }   
}

Estou iniciando meus estudos em Java e JSF , porem não sei se esta correto o modo que estou fazendo…
Obrigado.

2 Respostas

T

Olá.

Tive um problema mto parecido. vc pode olhar esse link.

Tudo indica que é problema no seu Converter.

Dicas:

  • Implemente uma verificação no getAsObject para verificar se o valor não está nulo
  • Verifique os HashCode e .equals das classes usadas

Boa sorte.

honjoya

Galera o problema foi resolvido … graças ao nosso amigo tiago… peguei pra estudar uma dica que ele me deu…
@ViewScope - como estava utilizando um material mais antigo para estudar JSF aparentemente não existia o @ViewScope

Segue abaixo um link interessante, para que estiver enfrentando este problema…
valeu e até a proxima… :roll:

http://www.infoblogs.com.br/frame/goframe.action?contentId=50846

Criado 21 de julho de 2011
Ultima resposta 22 de jul. de 2011
Respostas 2
Participantes 2