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
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>
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:
[...]
@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([...]));
}
[...]
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:
[...]
@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;
}
[...]
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:
<jsp:useBean id="bean" scope="session" class="oggettiPersistenti.GestoreProgettoBean" />
Solo che così mi funziona solo a metà:
se "GestoreProgettoBean" lo modifico aggiungendo
codice:
private String stringadiprova="ciao";
public String getStringadiprova() {
return stringadiprova;
}
public void setStringadiprova(String stringadiprova) {
this.stringadiprova = stringadiprova;
}
Nella JSP basta inserire un
codice:
<jsp:getProperty name="bean" property="stringadiprova" />
Per farmi stampare a schermo il parametro.
Solo che se modifico così il getter
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, 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:
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)
[...]
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".
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ì...