2009-05-14 3 views
6

Ho fatto qualche ricerca, e la maggior parte degli esempi che ho trovato usano i moduli (ovviamente per l'input dell'utente) per raccogliere dati che vengono poi passati ad un'altra pagina JSP attraverso l'oggetto richiesta.Passare il parametro senza l'uso di moduli HTML in JSP

La mia domanda è: è possibile passare un parametro tra pagine JSP se il parametro non è stato impostato nei tag HTML <form>?

+1

Per me non è del tutto chiaro cosa intendi per "passare un parametro tra pagine JSP"? Le pagine JSP sono richieste distinte dal browser o si tratta di un invio di richieste lato server? E che tipo di parametro vuoi passare? Input dell'utente, qualche elaborazione/stato utente, ...? – rudolfson

risposta

5

Non c'è modo una pagina JSP può dire la differenza tra un URL GET costruito manualmente, ad esempio:

<a href="/foo.jsp?bar=baz">Go to the next JSP page</a>, contro qualcosa come:

<form method="get" action="/foo.jsp"> 
<input name="bar" value="baz"> 
</form> 

In entrambi i casi si può accedere attraverso getParameter o getParameterValues

È questo che stai chiedendo?

3

Di solito si passano i dati tra le pagine servlet/JSP o JSP in attributi con ambito (in richiesta, sessione o applicazione). Per esempio. request.setAttribute("key", data) può impostare l'attributo "chiave" in un JSP e request.getAttribute("key") ottiene questi dati in altri JSP (se più JSP stanno elaborando la stessa richiesta).

È possibile creare parametri falsi avvolgendo la richiesta e sovrascrivendo getParameter e metodo simile, se questo è ciò di cui si ha realmente bisogno.

Aggiornamento: la mia risposta si riferisce al passaggio di dati tra più parti che eseguono la stessa richiesta. Questo può o non può essere quello che vuoi, in quanto la tua domanda non è chiara.

17

Esistono alcuni modi per passare informazioni da una pagina JSP a un'altra.

1. Valori nascosti.

Basta scrivere i dati in un campo di input all'interno di un modulo con il tipo "nascosto", ad es.

<input type="hidden" name="mydata" value="<%=thedata%>"> 

I dati scritti verranno quindi restituiti quando viene inviato il modulo pertinente. Questo può essere un modo utile per "portare avanti" le informazioni mentre l'utente compila una serie di finestre di dialogo in cui tutto lo stato è il lato utente ei pulsanti avanti e indietro funzioneranno come previsto.

2. Scrittura URL.

Collegare i parametri agli URL nei collegamenti nella pagina, ad es.

<a href="another.jsp?mydata=<%=thedata>>Go!</a> 

Questo mantiene anche lo stato con il cliente, mentre eliminando la necessità di un elemento del modulo da presentare.

3. Cookies.

Dovrebbe parlare da solo. Lo stato è ancora sul lato utente, ma ora viene gestito da un cookie. Più fragile in qualche modo poiché alcune persone disabilitano i cookie. Anche i pulsanti Avanti e Indietro possono fare cose inaspettate, se non si sta attenti

4. lato server (sessione)

Infine è possibile memorizzare i dati in una variabile di sessione su un JSP e recuperarlo sul prossimo, per esempio

session.setAttribute(String key, Object value) 

e

session.getAttribute(String key) 

Qui lo stato è lato server conservato che ha alcuni vantaggi (l'utente può navigare lontano e tornare senza perdere il suo posto, ma tende a rendere i pulsanti Avanti e Indietro nella browser un po 'inaffidabile a meno che tu non stia attento Anche il valore è disponibile per tutte le pagine

Ha comunque il vantaggio che l'informazione non viene mai inviata al client ed è quindi più sicura e più a prova di manomissione.

+0

Un quinto modo è creare un POST lato server. –