Vaadin ValueChangeListener sur sélectionner un composant ne fonctionne pas beaux

J'ai un problème avec ValueChangeListener. J'ai ce code:

private void caricaSelectMainUser(){
    Object[] a = socFilName.get(0);
    List<String> elencosoc = societaDao.getSocieta();
    List<String> socUtente = app.getUserDao().getSocietaByUname(app.getCod_utente());   

    for (int i = 0; i < elencosoc.size(); i++) {            
        societa.addItem(elencosoc.get(i));
    }            
    caricaMenuFiliale();
    caricaMenuRisorsa();
    societa.select(socUtente.get(0));   
    filiale.select(a[1]);
    nome.select(a[2]);

    societa.addListener(new Property.ValueChangeListener() {

        @Override
        public void valueChange(ValueChangeEvent event) {
            filiale.removeAllItems();
            caricaMenuFiliale();
            nome.removeAllItems();
        }   
    });   

    filiale.addListener(new Property.ValueChangeListener() {

        @Override
        public void valueChange(ValueChangeEvent event) {
            System.out.println("entro nel listener filiale");
            nome.removeAllItems();
            caricaMenuRisorsa();
        }   
    });       

    nome.addListener(new ValueChangeListener() {

        @Override
        public void valueChange(ValueChangeEvent event) {
            getValuesFromDropDown();
        }   
    });       

    getValuesFromDropDown();}

Cette partie de code de gérer les auditeurs pour la "società","filiale" et "nom".

private void caricaMenuFiliale() {
List<Object[]> elencofilNew = app.getUserDao().getDescFilialeSoc(societa.getValue().toString());
mapFiliale = new HashMap<String,Object>();
for (int i = 0; i < elencofilNew.size(); i++) {
Object[] a = elencofilNew.get(i);
for (int j = 0; j < a.length; j++) {
mapFiliale.put(a[1].toString(), a[0]);
filiale.addItem(a[1]);
}
}
}
private void caricaMenuRisorsa() {
List<Object[]> elencoNominativiNew = app.getUserDao().getNominativiFromSoc(societa.getValue().toString());
map = new HashMap<String,Object>();
for (int i = 0; i < elencoNominativiNew.size(); i++) {
Object[] a = elencoNominativiNew.get(i);
map.put((String) a[0],a[1]);                        
nome.addItem((String) a[0].toString());
}
}
private void getValuesFromDropDown() {
String codsoc = societa.getValue().toString();
String codfil = mapFiliale.get(filiale.getValue().toString()).toString();
String codper = map.get(nome.getValue()).toString();
String mm = (mese.getValue().toString().length()==1?("0"+mese.getValue().toString())emoticonmese.getValue().toString()));
String aaaamm = anno.getValue().toString() + mm;
}

la séquence de flux doit être que lorsque la "societa" modifier, sélectionnez "filiale" est charge avec les données de lier avec la "société" et lorsque "filiale" changement de nom"," est charge avec des données se lier avec "la société" et "filiale" est sélectionné. Mais lorsque je sélectionne une nouvelle "société", le code ci-dessous démarrer

nome.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
getValuesFromDropDown();
}   
});    

et j'attrape le NullPointerException sur

String codfil = mapFiliale.get(filiale.getValue().toString()).toString();

dans getValuesFromDropDown() la méthode. Si j'annule l'appel de cette méthode de valueChangeListener de sélectionner "nome" tout fonctionne très bien. Je sais que ma logique pourrait avoir quelques problèmes, mais je ne sais pas pourquoi ce comportement. Quelqu'un pourrait-il m'aider?

Merci.

Ce qui, exactement, est nulle?
dans cette partie de code : String codfil = mapFiliale.get(filiale.getValue().toString()).toString(); la valeur null champ est filiale.getValue().toString()
Non, je veux dire... qu'est-Ce qui est null. Utilisez votre débogueur, comprendre ce qui s'est null. Le poster ici.
"filiale" est null. Cependant, pour le moment, je fige le problème à l'aide d'un bouton. De cette façon, je peux gérer les différents sélectionnez les composants à éviter le fou auditeurs, mais j'ai besoin de résoudre ce problème pour mes connaissances personnelles!!!
Donc, si la filiale est nulle, ce qui signifie que ce n'est pas un vaadin question. Je suppose que c'est un problème de portée. Sans la totalité du fichier, il sera impossible de savoir exactement ce qui est mal, mais c'est de base Java débogage, rien de vaadin.

OriginalL'auteur Mario | 2012-10-29