PDA

View Full Version : [JSP][JSF] Passare il valore di un parametro della querystring ad un bean


0rph3n
27-02-2008, 15:11
Ciao a tutti,
da ieri sto cercando di "imparare" ad usare le JSF, purtroppo sono già arrivato ad un punto morto.

Vi faccio un esempio:
ho una JSP che rappresenta una lista di documenti (di diversi tipi) di una data pratica.
<f:view>
<h:form>
<ul>
<li>
<h:commandLink action="#{controllerDocumenti.caricaDocumentoA}">
<h:outputText value="documento A" />
</h:commandLink>
</li>
<li>
<h:commandLink action="#{controllerDocumenti.caricaDocumentoB}">
<h:outputText value="documento B" />
</h:commandLink>
</li>
...
<li>
<h:commandLink action="#{controllerDocumenti.caricaDocumentoZ}">
<h:outputText value="documento Z" />
</h:commandLink>
</li>
</ul>
</h:form>
</f:view>

Le funzioni specificate nell'argomento action caricano un solo tipo di documento...e dovrebbero caricare il documento della pratica "aperta".
Ma come posso passare al documentController il codice della pratica "aperta" visto che suddetto codice arriva via querystring alla pagina della lista.
Se io mettessi un campo inputHidden in questo modo

<h:inputHidden value="<%= request.getParameter("codicePratica") %>" />

il documentController non si prenderebbe il valore in questione, mentre se mettessi un campo inputHidden in quest'altro modo

<h:inputHidden value="#{documentController.codicePratica}" />

il documentController si prenderebbe il valore del campo hidden ma sarebbe sbagliato in quanto al campo hidden non sarebbe stato assegnato il valore che mi arriva via querystring.

:mc: :help:

0rph3n
27-02-2008, 23:16
1up

0rph3n
29-02-2008, 10:49
Ollè, trovato!
Scompongo il problema esposto in precedenza in due sottoproblemi in modo da poter fornire una spiegazione migliore.

Primo problema: recuperare il valore di un parametro dell'URL
Per accedere ad un parametro dell'URL ci sono due modi, uno dichiarativo e uno non.

Il primo è usare la variabile "param" che mette a disposizione tutti i parametri presenti sulla querystring.

Es: #{param.NomeParametro}

Mentre per quanto riguarda il secondo bisogna scrivere due righe di codice:
FacesContext fc = FacesContext.getCurrentInstance();
String codicePratica = (String) fc.getExternalContext().getRequestParameterMap().get("codicePratica");


Secondo problema: assegnare al membro del bean il valore recuperato
Per assegnare al membro del bean il valore recuperato, ho creato una managed property relativa al bean nel faces-config.xml in modo da poterle assegnare un valore:

<managed-bean>
<managed-bean-name>controllerDocumenti</managed-bean-name>
<managed-bean-class>controllers.ControllerDocumenti</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
<managed-property>
<property-name>codicePratica</property-name>
<property-class>java.lang.String</property-class>
<value>#{param.codicePratica}</value>
</managed-property>
</managed-bean>


Molto probabilmente (anzi quasi sicuramente) si potrà fare anche via codice, ma questa soluzione mi sembra decisamente più comoda!


'iao

mercatinodelfumetto
15-09-2010, 09:57
scusa se rispondo a questo vecchio post, ma sto provando ad applicare una cosa simile a quella fatta qui e non ci riesco, puoi aiutarmi?