У меня проблема с ValueChangeListener
. У меня есть этот код:
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();}
Эта часть кода управляет слушателями для "società", "filiale" и "name".
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;
}
поток последовательности должен быть таким, чтобы при изменении «общества» выберите «filiale» загрузиться с привязкой данных к выбранному «обществу», а когда «filiale» изменить «имя», загрузиться с привязкой данных с выбранными «обществом» и «filiale» . Но когда я выбираю новое «общество», код ниже запускается
nome.addListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
getValuesFromDropDown();
}
});
и я ловлю NullPointerException
на
String codfil = mapFiliale.get(filiale.getValue().toString()).toString();
в методе getValuesFromDropDown(). Если я отменяю вызов этого метода из valueChangeListener из выбора «nome», все работает нормально. Я знаю, что у моей логики могут быть некоторые проблемы, но я не знаю, почему такое поведение. Кто-нибудь может мне помочь?
Спасибо.