Problemas com h:SelectOneMenu

0 respostas
cherador

e aew galera blz. bom, estou escrevendo minha duvida aqui pois já pesquisei mto sobre esse assunto. E nao consegui resolver meu problema.
segue o code

minha jsp

<h:selectOneMenu
                                        id="classes"
                                        value="#{provaController.classe}"
                                        valueChangeListener="#{classeController.classeChanged}"
                                        immediate="true" onchange="submit()" converter="model.Classe" >

                                        <f:selectItems id="classe" value="#{classeController.listClasse}" />
                                        <a4j:support event="onchange" reRender="cate" />
                                        
                                    </h:selectOneMenu>
                                    <h:message for="classes" showDetail="true" />


                                    <h:outputLabel value="Categoria: " styleClass="campo" />
                                    <a4j:outputPanel id="cate">
                                        <h:outputText id="categoria" value="#{classeController.catbyClasse}" styleClass="campo"/>
                                    </a4j:outputPanel>
                                    <rich:spacer width="100" height="30"/>

o que quero fazer é quando eu selecionar a classe do meu produto ele mostraria a categoria desse produto. As 2 entidades são relacionadas no banco.

tenho um converter

public class ClasseConverter implements Converter {

    public final static String CONVERTER_ID = "model.Classe"; //path dos beans da classe Estado

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

        try {
            if (value == null || value.equalsIgnoreCase("-1")) {
                return null;
            }
            Integer id = new Integer(value);
            System.out.println("value " + value);

            List<Categoria> i = new ClasseDAO().catByClasse(id);
          
            System.out.println("i " + i.toString());
            return i;


        } catch (NumberFormatException ne) {
            throw new ConverterException("Não foi possível converter (" + value + ") para Estado: não é um número inteiro.", ne);
        } catch (IllegalArgumentException e) {
            throw new ConverterException("Não foi possível converter (" + value + ") para Estado: identificador desconhecido.", e);

        }

    }

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

        if (value == null) {
            return null;
        }
        if (value instanceof Classe) {
            Classe aux = (Classe) value;
            return aux.getIdclasse().toString();
        } else if (value instanceof String && ((String) value).equalsIgnoreCase("-1")) {
            return "-1";
        } else {
            throw new ConverterException("(" + value.getClass() + ") não é uma instância.");
        }
    }
    
}

meu controller

public void classeChanged(ValueChangeEvent event) {
//nunca entra aqui
        Object obj = event.getNewValue();
        System.out.println("cla " + obj);
        clas.setIdclasse((Integer) obj);
       


    }
//aqui que eu preencho o combobox com as classes do produto 
    public List<SelectItem> getListClasse() {

        List<Classe> list = clDao.todasClasses();

        listCla = new ArrayList<SelectItem>(list.size());

        for (Classe cl : list) {
            listCla.add(new SelectItem(cl, cl.getClasse()));

        }

        return listCla;
    }
//aqui eu mostraria o nome da categoria por classe
    public String getCatbyClasse() {
//aqui vem tudo null
        System.out.println("idClasse " + clas.getIdclasse());
        System.out.println("clas.getIdclasse() " + clas.getIdclasse());


        System.out.println("cat " + clas.getCategoria());
        System.out.println("c1 " + clas.getClasse());


        return "ok";
    }

meu DAO

public List<Categoria> catByClasse(Integer idclasse) {
        System.out.println("catByClasse");
        EntityManager em = getEntityManager();
        try {

            Query q = em.createQuery("select cat from Classe cl, Categoria cat WHERE cl.categoria.id = cat.id AND cl.idclasse = "+idclasse);
            System.out.println("q " + q.getResultList());
            return q.getResultList();

        } finally {
            em.close();
        }
    }

meu bean

@Override
    public int hashCode() {
        int hash = 0;
        hash += (idclasse != null ? idclasse.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        if (this == object) {
            return true;
        }
        if (object == null) {
            return false;
        }
        if (!(object instanceof Classe)) {
            return false;
        }
        Classe other = (Classe) object;
        if ((this.idclasse == null && other.idclasse != null) || (this.idclasse != null && !this.idclasse.equals(other.idclasse))) {
            return false;
        }
        return true;
    }

tenho meu bean o equals e o hashcode mas ele ainda cntinua dando erro de cadastro:classes: Validation Error: Value is not valid

alguem pode me dah um help???

Criado 18 de abril de 2011
Respostas 0
Participantes 1