4

に問題があり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;
}

「ソシエタ」変更時は「フィリアーレ」を選択し、「ソシエティ」を選択した状態で「フィリアーレ」を選択し、「フィリアーレ」変更時は「ソシエティ」と「フィリアーレ」を選択した状態で「名前」をデータバインドしてロードする、という流れである必要があります。 . しかし、新しい「社会」を選択すると、以下のコードが開始されます

nome.addListener(new ValueChangeListener() {

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

NullPointerExceptionそして私はオンをキャッチ

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

getValuesFromDropDown() メソッドで。select "nome" の valueChangeListener からのこのメソッド呼び出しをキャンセルすると、すべて正常に動作します。私のロジックに問題がある可能性があることはわかっていますが、なぜこの動作になるのかわかりません。誰でも私を助けることができますか?

ありがとうございました。

4

1 に答える 1

1

societaリスナーで、nome.removeAllItems()を呼び出します。これにより、名前AbstractSelectのProperty.ValueChangeEventがトリガーされます。

societa.addListener(new Property.ValueChangeListener() {
    @Override
    public void valueChange(ValueChangeEvent event) {
        filiale.removeAllItems();
        caricaMenuFiliale();
        nome.removeAllItems();
    }   
});
于 2012-11-23T08:47:45.543 に答える