Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309

    istanziare oggetto dinamicamente

    Ciao
    mi trovo in questa situazione:
    da un file xml che carico tramite una jsp prendo il codiceIntervento.
    su un file properties faccio la mappatura tra il codice e il nome della classe che se ne deve occupare per creare un bean con i valori utili.
    avendo sottoforma di stringa il nome della classe che deve svolgere il lavoro come faccio a istanziare quest'ultima?

    grazie mille per gli eventuali suggerimenti
    tomcat 6.016
    netbeans 6.1

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: istanziare oggetto dinamicamente

    Originariamente inviato da dardo
    avendo sottoforma di stringa il nome della classe che deve svolgere il lavoro come faccio a istanziare quest'ultima?
    Tramite "reflection", partendo dal forName() di java.lang.Class.
    Creating New Class Instances
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    Ciao
    grazie mille. più facile di come pensavo.
    Se riesci avrei bisogno solo di un suggerimento su come proseguire:
    dalla servlet istanzio la classe che fa il lavoro mi restituisce di conseguenza un bean di cui non conosco le proprietà.
    Il bean lo metto in sessione e dovro poi visualizzare le proprietà su una jsp.
    A questo punto con session.getAttribute("...") avrò un bean ancora sconosciuto.
    come proseguire?
    pensavo che in base al nome della classe dedicare una jsp creata per quell'oggetto oppure c'è qualche sistema per fare tutto in modo dinamico e quindi in un'unica jsp?
    Inoltre gli stessi valori una volta visualizzati mi serviranno per fare una "stampa unione" con un docx
    spero di essermi spiegato bene
    tomcat 6.016
    netbeans 6.1

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Prova a valutare una cosa del genere:

    codice:
      Object o = session.getAttribute("bean");
    
      Method[] m = o.getClass().getMethods();
    
      for (int index = 0; index < m.length; index++)
      {
        if (m[index].getName().startsWith("get"))
        {
          System.out.println(m[index].invoke(o));
        }
      }
    (import e gestione delle eccezioni esclusi)

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dardo
    dalla servlet istanzio la classe che fa il lavoro mi restituisce di conseguenza un bean di cui non conosco le proprietà.

    A questo punto con session.getAttribute("...") avrò un bean ancora sconosciuto.
    come proseguire?
    Quindi la questione è che hai un oggetto di cui non sai a priori quante/quali proprietà ha e vorresti "enumerare" le proprietà per stamparle?

    La prima cosa che mi viene in mente è quella di usare le classi del package java.beans, dedicato alla gestione dei bean e alla loro "introspezione".

    Ecco un esempio basilare per elencare tutte le "proprietà" (come intese secondo le specifiche JavaBean) di un JLabel:

    codice:
    import java.beans.*;
    import javax.swing.*;
    
    public class Prova {
        public static void main(String[] args) {
            try {
                enumeraProprieta(new JLabel());
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    
        public static void enumeraProprieta(Object obj) throws IntrospectionException {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
    
            PropertyDescriptor[] propsDesc = beanInfo.getPropertyDescriptors();
    
            for (int i = 0; i < propsDesc.length; i++) {
                System.out.println("Property: " + propsDesc[i].getName());
            }
        }
    }
    Output parziale per JLabel:
    codice:
    Property: UI
    Property: UIClassID
    Property: accessibleContext
    Property: actionMap
    Property: alignmentX
    Property: alignmentY
    Property: ancestorListeners
    Property: autoscrolls
    Property: background
    Property: baselineResizeBehavior
    Property: border
    Property: component
    .......altro
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    ottimo
    grazie mille ora mi diverto un pò
    tomcat 6.016
    netbeans 6.1

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    scusatemi ma più che divertirmi qui tra caldo e altro sto andando in tilt (i condizionatori fissi non vanno e il portatile non riesce a raffreddare in modo decente.... un ente pubblico!!!!)
    tornando al problema prima della pausa pranzo prendevo la classe e tutto bene. unica cosa che dovevo interire anche il package di appartenenza nonostante ho fatto l'import del package che conterrà i beans.
    codice:
    .....
    FileInputStream fis = new FileInputStream(propertyPath);
    props.load(fis);     
    String ogg = props.getProperty(codice_intervento);                
    fis.close();
    
    Class classe = Class.forName(ogg);
    String nome = classe.getName();
    System.out.println(nome);
    la classe è giusta ho riprovato anche a inserire il package ma niente, ho sempre java.lang.ClassNotFoundException: PraticaRichiestaOccupazione oppure nel caso del package tutto il percorso in cui si trova la classe.
    Non capisco dove sto sbagliando
    tomcat 6.016
    netbeans 6.1

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da dardo
    codice:
    Class classe = Class.forName(ogg);
    java.lang.ClassNotFoundException: PraticaRichiestaOccupazione oppure nel caso del package tutto il percorso in cui si trova la classe.
    A forName() si deve passare il nome della classe completamente qualificato es. "org.xyz.NomeClasse"
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    scusatemi, il problema della classe non trovata l'ho risolto rimettendo per l'ennesima volta il package....
    tomcat 6.016
    netbeans 6.1

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2004
    Messaggi
    309
    Ciao
    riprendo il mio vecchio post per un motivo simile.
    ho rivisto un pò i dati che devono passare e in pratica ora o un oggetto che ha 4 metodi.
    3 restituiscono dei bean comuni e il quarto un List di bean generici.
    il problema è ora nella visualizzazione.
    scrivo la parte di codice che mi genera l'eccezione:
    codice:
    <%
            Iterator itDic = dichiarazioni.iterator();
            while(itDic.hasNext()){
                Object obj = (Object)itDic.next();
                Class clasz = obj.getClass();
                Method m = clasz.getMethod("getDescrizione");
                Object o = m.invoke(obj,m);
    %>
    <table class="dichiarazioni">
        <tr><td colspan="4" class="titolo"><%=o.toString()%></td></tr>
    </table>
    <%
    }
    %>
    il metodo deve restituire una stringa
    l'eccezione è: java.lang.NoSuchMethodException: java.lang.Class.getDescrizione()

    questo è l'unico metodo fisso che ha il bean. il resto devo ciclare l'oggetto prendere i metodi e ricavare i valori.
    questi ultimi avranno la loro "etichetta" in un file di properties dedicato
    L'idea è che per ogni pratica va creato il bean dedicato, il file di properties dedicato e infine la classe che si occupa di prendere i valori dal file xml che gli viene passato tramite un form.
    tomcat 6.016
    netbeans 6.1

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.