Duvida "Erro de validação: o valor não é válido" JSF + Primefaces [RESOLVIDO]

2 respostas
P

Seguinte pessoal, na minha view tenho 4 combos que preciso atualiza-las, conforme sua seleção (exemplo, seleciono o distrito, carrega-se a lista de setores, seleciono os setores e carrega-se a lista de quadras), ate a seleção de distritos está ok, porem quando vou selecionar um setor para carregar a lista de quadras, aparece a seguinte mensagem: setor:Erro de validação: o valor não é válido. Ja implementei o equals e hashcode no meu pojo, implementei a java.io.Serializable e estou ficando sem opções aqui…será que alguem poderia me ajudar???

grato!!

segue os codigos:

pojo:

public class ShpLote implements Serializable{
 public ShpLote(){
        super();
    }

    private Long id;
    private String inscricao_cadastral;
    private String distrito;
    private String setor;
    private String quadra;
    private String lote;

//getters e setters

 @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ShpLote other = (ShpLote) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 3;
        hash = 61 * hash + (this.id != null ? this.id.hashCode() : 0);
        return hash;
    }
//detalhe nessa parte, ja inclusive implementei o eqs e hcode para cada atributo e mesmo asism nada
}

Managed Bean

@ManagedBean(name="bean")
@RequestScoped
public class Geral {

    public Geral() {
        this.distritos.add(new SelectItem("01", "01"));
    }
    private List<SelectItem> distritos = new ArrayList<SelectItem>();
    private List<SelectItem> setores = new ArrayList<SelectItem>();
    private List<SelectItem> quadras = new ArrayList<SelectItem>();
    private List<SelectItem> lotes = new ArrayList<SelectItem>();

    private ShpLote lote = new ShpLote();

    public void atualizaSetor(){
        this.setores.add(new SelectItem("01", "01"));
        this.lote.setInscricao_cadastral(this.lote.getDistrito());
    }

    public void atualizaQuadra(){
        FacesContext context = FacesContext.getCurrentInstance();
        if (this.lote.getDistrito().equals("")){
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione um distrito primeiro!", ""));
        } else {
            this.quadras.add(new SelectItem("01", "01"));
            this.lote.setInscricao_cadastral(this.lote.getInscricao_cadastral() + this.lote.getSetor());
        }
    }

    public void atualizaLote(){
        FacesContext context = FacesContext.getCurrentInstance();
        if (this.lote.getSetor().equals("")){
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione um setor primeiro!", ""));
        } else {
            this.lotes.add(new SelectItem("01", "01"));
            this.lote.setInscricao_cadastral(this.lote.getInscricao_cadastral() + this.lote.getQuadra());
        }
    }

    public void atualizaInsc(){
        FacesContext context = FacesContext.getCurrentInstance();
        if (this.lote.getSetor().equals("")){
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Selecione um lote primeiro!", ""));
        } else {
            this.lote.setInscricao_cadastral(this.lote.getInscricao_cadastral() + this.lote.getLote());
        }
    }
//getters e setters

//detalhe nessa classe que tambem ja tentei implementar o eqs e hcode para o objeto ShpLote
}

xhtml

<h:panelGrid columns="2">
                                    <h:outputLabel for="distrito" value="Distrito:"/>
                                    <h:selectOneMenu id="distrito" required="true" requiredMessage="Selecione o distrito" 
                                                     value="#{bean.lote.distrito}" style="width: 120px;">
                                        <f:selectItem itemValue="" itemLabel="Selecione o distrito..." />
                                        <f:selectItems var="lista" value="#{bean.distritos}"/>
                                        <p:ajax event="change" listener="#{bean.atualizaSetor}" update="insc, setor, msg" />
                                    </h:selectOneMenu>

                                    <h:outputLabel for="setor" value="Setor:"/>
                                    <h:selectOneMenu id="setor" required="true" requiredMessage="Selecione o setor"
                                                     value="#{bean.lote.setor}" style="width: 120px;">
                                        <f:selectItem itemValue="" itemLabel="Selecione o setor..." />
                                        <f:selectItems var="lista" value="#{bean.setores}"/>
                                        <p:ajax event="change" listener="#{bean.atualizaQuadra}" update="insc, quadra, msg" />
                                    </h:selectOneMenu>

                                    <h:outputLabel for="quadra" value="Quadra:"/>
                                    <h:selectOneMenu id="quadra" required="true" requiredMessage="Selecione a quadra"
                                                     value="#{bean.lote.quadra}" style="width: 120px;">
                                        <f:selectItem itemValue="" itemLabel="Selecione a quadra..." />
                                        <f:selectItems var="lista" value="#{bean.quadras}"/>
                                        <p:ajax event="change" listener="#{bean.atualizaLote}" update="insc, lote, msg" />
                                    </h:selectOneMenu>

                                    <h:outputLabel for="lote" value="Lote:"/>
                                    <h:selectOneMenu id="lote" required="true" requiredMessage="Selecione o lote"
                                                     value="#{bean.lote.lote}" style="width: 120px;">
                                        <f:selectItem itemValue="" itemLabel="Selecione o lote..." />
                                        <f:selectItems var="lista" value="#{bean.lotes}"/>
                                        <p:ajax event="change" listener="#{bean.atualizaInsc}" update="insc, msg" />
                                    </h:selectOneMenu>

                                    <h:outputLabel for="insc" value="Inscri&ccedil;&atilde;o cadastral:"/>
                                    <h:outputText id="insc" value="#{bean.lote.inscricao_cadastral}"/>
                                </h:panelGrid>

Estou usando o Mojarra 2.0.4 com primefaces 2.2

Qualquer ajuda é bem-vinda!

thanx

2 Respostas

P

Consegui resolver pessoal.

Em vez de usar o escopo de requisição, usei o escopo de visão, onde a instancia da classe permanece ativa durante as requisições naquela pagina. Com o escopo de requisição, a cada “mudada” na combo, ele criava a outra referencia para aquele objeto, portanto, o hashcode mudava e por isso dava aquela mensagem.

tenclar

passe pra mim como faz combobox aninhados

Criado 15 de fevereiro de 2011
Ultima resposta 17 de jul. de 2011
Respostas 2
Participantes 2