|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2009
Messaggi: 129
|
[JSF]....ma come faccio a...?
Ciao ragazzi.
Allora ho un'applicazione sviluppata con JSF+Spring+Hibernate. Il problema è il seguente. Ho una pagina in cui viene visulizzata una tabella (h: dataTable) con dei prodotti presi da database. Per ogni prodotto(quindi per ogni riga della tabella)ho inserito un tasto DELETE,per permettere all'utente di poter cancellare dal database (e quindi dalla tabella quel prodotto). Per cancellare un prodotto dalla tabella prodotto del database ho il solito oggetto Dao richiamato da un service,che si occupa appunto di eliminare il prodotto. Però in questo caso ho questi due problemi: il metodo dell'oggetto Dao che cancella dal db ha seguente signature: Codice:
public void eliminaProdotto(Prodotto prodotto); Problema 2: nel ipotetico metodo che effettuerà questa operazione,dovrei anche dire alla pagine di effettuare un refresh(per rendere visibili all'utente la modifica della tabella).Come faccio? Spero di essere stato chiaro il piu possibile. Saluti |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: May 2009
Messaggi: 129
|
Ho risolto!
Se a qualcuno può servire dò una piccola spiegazione: I componenti UI di jsf come le tabelle corrispondo ad oggetti UIComponent. Precisamente un <h: datatable> corrisponde alla classe UIData. Fornendo il managed bean di una variabile di istanza UIData con relativi metodi get e set e facendo il binding della tabella nella pagine jsp con la variabile di istanza del managed bean è possibile richiamare il metodo Object getRowData() su quest'ultima in modo da memorizzare in un Object il contenuto della riga selezionata(ovvero della riga dove è stato premuto il bottone). quindi: nella pagina JSP: Codice:
<h: datatable binding="ManagedBean.dataTable" ..... action="ManagedBean.azioneDaEseguire > Codice:
public class TuoManagedBeans{
.....
.....
private UIData dataTable;
.....
.....
//metodi set e get per dataTable
....
....
public String azioneDaEseguire(){
String result="";
try{
//METODO CHE ESEGUE LA LOGICA
result="success";
return result;
}catch(Exception e){
return result;
}
}
Codice:
<managed-bean>
<managed-bean-name>tuoManagedBeans</managed-bean-name>
<managed-bean-class>web.TuoMostraProdotti</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
....
eventuali managed-propery
....
<managed-property>
<property-name>dataTable</property-name>
<value>#{dataTable}</value>
</managed-property>
</managed-bean>
..............
..............
<navigation-rule>
<description>elimina un prodotto dal catalogo</description>
<from-view-id>/tuapaginaJSP.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/tuapagina.jsp</to-view-id>
</navigation-case>
</navigation-rule>
Ultima modifica di javacomelava : 19-11-2009 alle 20:14. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Ciao, per eliminare una riga dalla tua dataTable e quindi anche dalla tabella che stava dietro hai utilizzato il metodo più corretto e semplice, ossia quello di recuperare la riga corrente tramite un oggetto UIData.
Per quanto riguarda il secondo punto, quello che puoi fare, è di fare una sorta di getList appena prima di tornare alla pagina in cui reindirizzi.
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2009
Messaggi: 129
|
Ciao,grzie per la risposta.
Comunque risolvendo il primo punto ho risolto anche il secondo. Infatti il metodo che si occupa di eseguire l'azione nel managed beans torna una stringa: "success" Nelle regole di navigazione ho inserito un Navigation Case che mi "refresha" la pagina quando riceva quella stringa dal metodo! Saluti |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:43.



















