PDA

View Full Version : [JAVA] Passare oggetti da una jsp ad una servlet


Edde
02-02-2007, 10:01
Ciao :)

Ho una servlet che riceve 3 oggetti da un metodo e li passa ad una jsp con il seguente codice:


req.setAttribute("model", owlModel);
req.setAttribute("mapping", map);

req.setAttribute("extObjProp", extObjProp);

RequestDispatcher rt = this.getServletContext().getRequestDispatcher("/seleziona.jsp");

rt.forward(req,resp);

Adesso dovrei prendere due di questi oggetti, e ripassarli dalla jsp alla servlet di partenza, richiamata da una form (che si trova nella jsp)
In realtà non vengono manipolati dalla jsp, quindi sarebbe stato sufficiente memorizzarli nella sessione della servlet, ma per poterlo fare l'oggetto deve implementare l'interfaccia "serializable", ed i miei non lo fanno... quindi mi è stato consigliato di procedere con questo "botta e risposta"...

Nella jsp chiamo:


OWLModel owlModel = (OWLModel) request.getAttribute("model");
Mapping map = (Mapping) request.getAttribute("mapping");


request.setAttribute("model", owlModel);
request.setAttribute("mapping", map);

E a quanto mi hanno detto, la servlet scatenata dal form dovrebbe poter leggere questi due oggetti.

In realtà chiamando poi dalla servlet:


OWLModel owlModel = (OWLModel) req.getSession().getAttribute("model");
Mapping map = (Mapping) req.getSession().getAttribute("mapping");

...ottengo due null...

Sapete dirmi come procedere? Grazie :)

@nta
02-02-2007, 10:23
quando scrivi sulla jsp:
OWLModel owlModel = (OWLModel) request.getAttribute("model");
Mapping map = (Mapping) request.getAttribute("mapping");


request.setAttribute("model", owlModel);
request.setAttribute("mapping", map);

devi considerare che ciò avviene lato server e non sul client; dunque non puoi inviare dati alla servlet in questo modo. Poui però immagazzinare gli attributi relativi agli oggetti in tag del tipo imput e poi una volta arrivati sul server ricostruire gli oggetti originari.

Edde
02-02-2007, 10:26
quando scrivi sulla jsp:
OWLModel owlModel = (OWLModel) request.getAttribute("model");
Mapping map = (Mapping) request.getAttribute("mapping");


request.setAttribute("model", owlModel);
request.setAttribute("mapping", map);

devi considerare che ciò avviene lato server e non sul client; dunque non puoi inviare dati alla servlet in questo modo.

E come potrei fare?

Grazie :)

@nta
02-02-2007, 10:31
Ho editato sopra in questo modo:

Poui però immagazzinare gli attributi relativi agli oggetti in tag del tipo imput e poi una volta arrivati sul server ricostruire gli oggetti originari.

Spero di esserti stato utile.

Edde
02-02-2007, 10:38
Ho editato sopra in questo modo:

Poui però immagazzinare gli attributi relativi agli oggetti in tag del tipo imput e poi una volta arrivati sul server ricostruire gli oggetti originari.

Spero di esserti stato utile.

E' una cosa un po' complicata, perchè i due oggetti memorizzati sono, in un certo senso, degli alberi. Insomma, strutture complesse, all'interno delle quali ci sono vettori di strutture più semplici... sarebbe un casino.

Credo di aver risolto però: ho schiaffato entrambi gli oggetti in un vector (che implementa questa benedetta serializable) e ho memorizzato lui nella sessione.

Che ne dici?

@nta
02-02-2007, 10:43
va benissimo, se puoi utilizzare la sessione questa è la soluzione miglire.

Caio.

Edde
02-02-2007, 10:48
Grazie :)