Thymeleaf e select capire come identificare il valore selezionato

di il
6 risposte

Thymeleaf e select capire come identificare il valore selezionato

Premessa:
Seguo un corso di programmazione da ottobre dell'anno scorso e recentemente abbiamo iniziato con html css e adesso anche con Spring. Ci stiamo esercitando a creare progetti da zero aggiungendo le dipendenze e moduli vari neccessari. Tutto molto interessante.I Progetti sono molto smilzi e facili, per ora: un solo modello, un controller un serviceDao e due interfaccie (Repository e una Service) . Esercizi altrettanto facili : ciò che al momento facciamo è semplicemente la visualizzazione in una pagina html dei dati presenti in un db "mySql" mariaDb, visto che il front end non sarà la nostra specializzazione non abbiamo fatto in maniera molto approfondita html però io sto studiando a casa e ho incontrato un problema che adesso vi espongo:

Nella pagina sono riuscito con th:each a ciclare l'entita e a valorizzare la riga della tabella html. e fin qui tutto bene.
Ora vorrei che l'utente possa selezionarne uno in maniera da poter vedere tutti i dettagli di quello appena selezionato.
posto il codice:
	<table class="table">
					<thead>
						<tr>
							<th scope="col">Codice</th>
							<th scope="col">Nome Contatto</th>
							<th scope="col">Indirizzo</th>
							<th scope="col">Citta'</th>
							
						</tr>
					</thead>
					<tbody>
						<tr th:each="c : ${clienti}">
							<td th:text="${c.IDCliente}"></td>
							<td th:text="${c.contatto}"></td>
							<td th:text="${c.indirizzo}"></td>
							<td th:text="${c.citta}"></td>
						
						</tr>
					</tbody>
				</table>
ho pensato ad una select per far scegliere all'utente e poi una card per visualizzare il contenuto .(oppure in un altra pagina).

il problema è : come fare a identificare ciò che è stato selezionato? sto leggendo diversi manuali ma non ho trovato nulla....
<select id="cli" name="cli" class="form-select"
						aria-label="Default select example">
						<option selected>Seleziona il Cliente</option>
						<option th:each="c : ${clienti}" value="th:text='${IDCliente}'"
							th:text="${c.contatto}"></option>
					</select>
al valore dell'elemento gli ho passato il valore della variabile id del modello...
anche se dichiarassi un avariabile con th:whith.... quale valore dovrei assegnarli ?? non saprei come identificare qualla che ha selezionato l'utente.

6 Risposte

  • Re: Thymeleaf e select capire come identificare il valore selezionato

    neofitaJava ha scritto:


    Ora vorrei che l'utente possa selezionarne uno in maniera da poter vedere tutti i dettagli di quello appena selezionato.
    La cosa più semplice è generare all'interno del blocco "each" un banale link ( <a> ) del tipo:

    http://blablabla/dettaglio-cliente.html?id=nnn

    nnn il Id cliente.

    O in alternativa un piccolo form in GET con solo il pulsante di submit es "Dettaglio"

    Una nuova pagina comunque la devi richiedere.
  • Re: Thymeleaf e select capire come identificare il valore selezionato

    andbin ha scritto:


    neofitaJava ha scritto:


    Ora vorrei che l'utente possa selezionarne uno in maniera da poter vedere tutti i dettagli di quello appena selezionato.
    La cosa più semplice è generare all'interno del blocco "each" un banale link ( <a> ) del tipo:

    http://blablabla/dettaglio-cliente.html?id=nn

    nnn il Id cliente.

    O in alternativa un piccolo form in GET con solo il pulsante di submit es "Dettaglio"

    Una nuova pagina comunque la devi richiedere.

    credo di aver capito...
    provo a fare tutte e due le soluzioni
    prima provo il link .

    A lezione ci sono stati accennati i metodi post e get.
    ti posto il controller:

    se non volessi fare il link ma direttamente un nuovo metodo lo devo fare dentro il controller giusto??
    per piacere dimmi se cosi' come ho fatto questo va bene ..

    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.ModelMap;
    import org.springframework.web.bind.annotation.GetMapping;
    
    import com.azienda.appclientinorthwind.service.ClienteService;
    
    @Controller
    public class HomeController {
    
    	@Autowired
    	private ClienteService clienteService;
    
    	@GetMapping(value = { "/", "index" })
    	public String index(ModelMap map, HttpSession session) {
    		map.addAttribute("clienti", clienteService.getAllClienti());
    		return "index";
    	}
    }
  • Re: Thymeleaf e select capire come identificare il valore selezionato

    neofitaJava ha scritto:


    se non volessi fare il link ma direttamente un nuovo metodo lo devo fare dentro il controller giusto??
    Un nuovo metodo con @GetMapping comunque è da fare, per poter gestire la richiesta della pagina dettaglio-cliente.html

    Dalla lista semplicemente ci si arriva facendo la request cliccando su un link o su un pulsante-submit di un form.
  • Re: Thymeleaf e select capire come identificare il valore selezionato

    andbin ha scritto:


    neofitaJava ha scritto:


    se non volessi fare il link ma direttamente un nuovo metodo lo devo fare dentro il controller giusto??
    Un nuovo metodo con @GetMapping comunque è da fare, per poter gestire la richiesta della pagina dettaglio-cliente.html

    Dalla lista semplicemente ci si arriva facendo la request cliccando su un link o su un pulsante-submit di un form.
    nel link concateno il nome della pagina con l'id del cliente:

    Sto facendo la parte di modifica e cancellazione su un'altro progetto che abbiamo fatto a lezione :

    adesso sull'index pricipale visualizzo tutti i libri, invece sulla index dell'admin visualizzo in una tabella tutti i libri in piu' abbiamo dovuto fare due colonne per i link Modica e cancella.

    <td><a th:href="'modifica/'+${l.idlibro}" class="bottoni-link>Modifica</a></td>

    ho scritto anche il controller anche se a lezione non l'abbiamo iniziato(cosa che faremo tra un paio di giorni):

    @RequestMapping(value = { "/admin/modifica/{idlibro}", "/admin/modifica" })
    	public String aggiorna(@PathVariable int idlibro,ModelMap map, HttpSession session) {
    		map.addAttribute("libri", libroService.getLibroByidlibro(idlibro));
    		return "admin/modifica";
    	}

    Sempre che il controller vada bene...
    credo di dover fare queste due cose:
    1) vedere le propieta' ed eventualmente modificarle
    2) salvare l'ogetto modificato nel db

    ma il problema e': come accedere all'oggetto nella pagina html?!?!
    (fin'ora abbiamo ciclato una lista con th:each riga : ${nometabella})
    ma se tutto funziona correttamente dovrei avere a disposizione solo un oggetto , quello con l'id richiesto
    ----------------------------------------------
    dopo svariati tentativi di ricerca ho trovato un bel manuale e ho imparato a dichiarare una variabile
    th:with="l = ${libri}"
    adesso posso fare la visualizzazione senza problemi.
    (quindi una pagina visualizza dettagli riuscirei a farla e la faccio per esercitarmi un po' )
    poi devo provare a vedere se nel manuale c'è qualcosa per modificare questa variabile e salvarla sul db.... si accettano consigli
  • Re: Thymeleaf e select capire come identificare il valore selezionato

    Una volta che hai aggiunto l'attributo libri con:
    map.addAttribute("libri", libroService.getLibroByidlibro(idlibro));
    nel templato admin/modifica puoi accedere a tutte le proprietà del libro attraverso l'attributo libri e modificarle in un form. Dovrai aggiungere un metodo, nel controller, che riceva in POST le modifiche e le salvi sul db sostituendole alle precedenti.

    P.e. se libri ha un campo titolo ed un metodo getTitolo() puoi modificarlo in questo modo:
     <input  id="titolo" class="form-control" type="text" name="titolo" th:value="${libri.getTitolo()}" required />
  • Re: Thymeleaf e select capire come identificare il valore selezionato

    Scusate se non ho risposto per tempo e che subito dopo sono stato assunto e non ho più avuto tempo!!. Vi ringrazio davvero a tutti, siete stati gentilissimi e molto formativi :) Alla fine Thymeleaf e tante altre tecnologie che ho studiato non le uso a lavoro e mi ha fatto sorridere rileggere i post.

    di nuovo Grazie e mi è rivenuta voglia di mettermi a studiare un pò :)

Devi accedere o registrarti per scrivere nel forum
6 risposte