Salve a tutti!
Ho realizzato un progetto in j2ee (su NetBeans), si tratta di un prototipo di un sito.
Ho creato la parte della persistenza seguendo questa guida http://code.google.com/p/barattalo/wiki/PageName e tutto funziona senza problemi.
Nel senso che la pagina jsp propone, per esempio, il form di iscrizione
che rimanda alla servlet dedicata. Questa gestisce l'operazione, interagisce con la parte della persistenza e memorizza l'utente, dando in output anche i dati appena inseriti:codice:<form action="ServletIscrizione"> Nome: <input type='text' name='nome' /> Cognome: <input type='text' name='cognome' /> Citta': <input type='text' name='citta' /> Indirizzo: <input type='text' name='indirizzo' /> Email: <input type='text' name='email' /> <input type="submit" name="inviaIscrizione" value="Invia"/> </form>
E fin qui tutto bene. Sostanzialmente la pagina JSP inoltra la richiesta alla Servlet che, avvalendosi di "gestoreProgettoBean" agisce sulla parte della persistenza. "GestoreProgettoBean" è, per l'appunto, un bean:codice:[...] @WebServlet(name="ServletIscrizione", urlPatterns={"/ServletIscrizione"}) public class ServletIscrizione extends HttpServlet { //questo è il bean che fornisce l'interfaccia per manipolare gli oggetti persistenti @EJB private GestoreProgettoBeanLocal gestoreProgettoBean; [...] if (request.getParameter("inviaIscrizione")!=null){ gestoreProgettoBean.addUtente([...]); out.println("appena aggiunto: "+gestoreProgettoBean.findUtente([...])); } [...]
Quello che vorrei, invece, è fare in modo che la JSP dialogi direttamente con "GestoreProgettoBean". Mi son detto: "è un bean, sarà sufficiente nella pagina JSP una riga di..."codice:[...] @Stateless public class GestoreProgettoBean implements GestoreProgettoBeanLocal { @EJB private UtenteFacadeLocal utenteFacade; @EJB private BarattoFacadeLocal barattoFacade; @EJB private ItemFacadeLocal itemFacade; @EJB private MessaggioFacadeLocal messaggioFacade; //********************************************** //********************************************** // // METODI PER MANIPOLARE ---UTENTE--- // //********************************************** //********************************************** public String getProva(){ return findUtenti().get(0).getOpenID(); } public List<Utente> findUtenti() { List<Utente> listaUtenti = utenteFacade.findAll(); return listaUtenti; } [...]
Solo che così mi funziona solo a metà:codice:<jsp:useBean id="bean" scope="session" class="oggettiPersistenti.GestoreProgettoBean" />
se "GestoreProgettoBean" lo modifico aggiungendo
Nella JSP basta inserire uncodice:private String stringadiprova="ciao"; public String getStringadiprova() { return stringadiprova; } public void setStringadiprova(String stringadiprova) { this.stringadiprova = stringadiprova; }
Per farmi stampare a schermo il parametro.codice:<jsp:getProperty name="bean" property="stringadiprova" />
Solo che se modifico così il getter
Insomma, semplicemente voglio che mi restituisca il nome del primo utente registrato (e vi assicura che c'è). Quindi, nel momento in cui entrano in gioco azioni di persistenza il bean non funzona più e mi da quest'errore:codice:@Stateless public class GestoreProgettoBean implements GestoreProgettoBeanLocal { @EJB private UtenteFacadeLocal utenteFacade; @EJB private BarattoFacadeLocal barattoFacade; @EJB private ItemFacadeLocal itemFacade; @EJB private MessaggioFacadeLocal messaggioFacade; private String stringadiprova="ciao"; public String getStringadiprova() { return getProva(); } public void setStringadiprova(String stringadiprova) { this.stringadiprova = stringadiprova; } //********************************************** //********************************************** // // METODI PER MANIPOLARE ---UTENTE--- // //********************************************** //********************************************** public String getProva(){ return findUtenti().get(0).getNome(); } public List<Utente> findUtenti() { List<Utente> listaUtenti = utenteFacade.findAll(); return listaUtenti; }
Insomma, è come se mi dicesse "Ok, gioca quanto vuoi col tuo bean dalla jsp, ma se vuoi fare ricerche nel DB questa non è la strada giusta".codice:AVVERTENZA: StandardWrapperValve[jsp]: PWC1406: Servlet.service() for servlet jsp threw exception java.lang.NullPointerException at oggettiPersistenti.GestoreProgettoBean.findUtenti(GestoreProgettoBean.java:52) at oggettiPersistenti.GestoreProgettoBean.getProva(GestoreProgettoBean.java:48) at oggettiPersistenti.GestoreProgettoBean.getStringadiprova(GestoreProgettoBean.java:21) at org.apache.jsp.index_jsp._jspService(index_jsp.java from :74) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) [...]
Cosa sto sbagliando? Perchè dalla servlet invece mi funziona? Tipo aggiungendo nella servlet
"out.println(gestoreProgettoBean.getStringadiprova ());"
funziona, mi stampa il nome del primo iscritto...
Scusate per la lunghezza, ma non sapevo come sintetizzare più di così...

Rispondi quotando