Spring MVC: Passare un parametro al di fuori di un form

di il
12 risposte

Spring MVC: Passare un parametro al di fuori di un form

Ciao a tutti, come faccio a passare un parametro (utilizzato nel form) al di fuori dello stesso form?
Mi spiego meglio; ho un form dove vengono modificati i dati di un cliente ( con un bottone "Salva cliente" ), poi dopo ho aggiunto un'altro bottone per eliminare il cliente (bottone "Elimina"). Per quest'ultimo, ho fatto un button onclick="window.location.href dove chiamo il controller corrispondente e passo il codice fiscale del cliente.
Solo che questo non viene letto.
Cosa mi suggerite di fare? Grazie a tutti.

12 Risposte

  • Re: Spring MVC: Passare un parametro al di fuori di un form

    alex989 ha scritto:


    poi dopo ho aggiunto un'altro bottone per eliminare il cliente (bottone "Elimina"). Per quest'ultimo, ho fatto un button onclick="window.location.href dove chiamo il controller corrispondente e passo il codice fiscale del cliente.
    Solo che questo non viene letto.
    Ci sono diverse questioni e problemi: 1) se fai una cosa del genere con quel onclick, la request che fai è in GET e ... fare una eliminazione con GET concettualmente non è in generale una buona cosa.
    2) se ho visto bene, stai generando pure male il tag button. Guarda bene (ho evidenziato gli apici doppi):

    <button onclick="window.location.href='../delete/'"<c:out value='${customer.codicefiscale}'/>>Elimina</button>

    quindi l'output del <c:out> risulta come se fosse un "attributo" di <button> (e non qualcosa dentro il onclick e più specificatamente nel url). Ovviamente NON ha senso.


    Soluzione: creare un altro piccolo <form> (in POST !) con action il url di delete, con dentro un campo hidden per il codice fiscale e con un pulsante di submit con il testo "Elimina". Tutto qui.
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    andbin ha scritto:


    alex989 ha scritto:


    poi dopo ho aggiunto un'altro bottone per eliminare il cliente (bottone "Elimina"). Per quest'ultimo, ho fatto un button onclick="window.location.href dove chiamo il controller corrispondente e passo il codice fiscale del cliente.
    Solo che questo non viene letto.
    Ci sono diverse questioni e problemi: 1) se fai una cosa del genere con quel onclick, la request che fai è in GET e ... fare una eliminazione con GET concettualmente non è in generale una buona cosa.
    2) se ho visto bene, stai generando pure male il tag button. Guarda bene (ho evidenziato gli apici doppi):

    <button onclick="window.location.href='../delete/'"<c:out value='${customer.codicefiscale}'/>>Elimina</button>

    quindi l'output del <c:out> risulta come se fosse un "attributo" di <button> (e non qualcosa dentro il onclick e più specificatamente nel url). Ovviamente NON ha senso.


    Soluzione: creare un altro piccolo <form> (in POST !) con action il url di delete, con dentro un campo hidden per il codice fiscale e con un pulsante di submit con il testo "Elimina". Tutto qui.

    Siccome devo avere entrambi i button nello stesso form, come faccio ad avere due button collegati in uno stesso form con due compiti diversi? Scusa per la domanda, ho iniziato da poco a programmare. Posso avere un esempio di questo?
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    Nessuno ti vieta di avere due form nella stessa pagina
    ognuna con il suo button.
    In alternativa potresti provare a cambiare la action del form sull'onsubmit a seconda del pulsante
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    alex989 ha scritto:


    Siccome devo avere entrambi i button nello stesso form, come faccio ad avere due button collegati in uno stesso form con due compiti diversi?
    E perché devono essere nello stesso form? E' una richiesta specifica di qualcuno? Tieni presente che hai url di action differenti! E hai anche dati differenti, se fai un update hai più dati mentre se fai un delete pare che hai solo il codice fiscale.
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    sspintux ha scritto:


    Nessuno ti vieta di avere due form nella stessa pagina
    ognuna con il suo button.
    In alternativa potresti provare a cambiare la action del form sull'onsubmit a seconda del pulsante
    Ho provato a mettere due button nel form facendo in questo modo:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page isELIgnored="false"%>
    <html>
    <head>
    <title>Aggiorna cliente</title>
    
    </head>
    <body>
    	<p><strong><a href="../readviewcust">Elenco clienti</a></strong></p>
    <form action="../updatecustdet" method="post">
    <pre>
    <c:forEach var="customer" items="${listCustomer}">
    <tr><th><h4>Informazioni di ${customer.cognome}  ${customer.nome}</h4></th></tr>
    Codice fiscale:    <input type="text" name="codicefiscale" value="${customer.codicefiscale}" />
    								
    Cognome:           <input type="text" name="cognome" value="${customer.cognome}" />
    		
    Nome:              <input type="text" name="nome" value="${customer.nome}" />
    	    
    Data nascita:      <input type="text" name="datanascita" value="${customer.datanascita}" />
    
    Indirizzo:         <input type="text" name="indirizzo" value="${customer.indirizzo}" />
    
    Numero telefono:   <input type="text" name="numerotelefono" value="${customer.numerotelefono}" />
    
    Email:             <input type="text" name="email" value="${customer.email}" />
    
    <tr>		    
    <input type="submit" class="button" name="editcust" value="Salva cliente" />
    <input type="submit" class="button" name="deletecust" value="Elimina" />
    </tr>	
    </c:forEach>	
    </pre>
    </form>
    ${msg}
    </body>
    </html>
    Il "Salva cliente" funziona, solo che per il button "Elimina" devo passare come parametro il codice fiscale; come si fa a passare un parametro con un form? Metto anche il codice del Controller corrispondente.
     @RequestMapping(value = "/updatecustdet", params="editcust", method = RequestMethod.POST)
    	public ModelAndView updateCustomer(@RequestParam("codicefiscale") String codicefiscale, @RequestParam("cognome") String cognome,
    			@RequestParam("nome") String nome, @RequestParam("datanascita") String datanascita, @RequestParam("indirizzo") String indirizzo, 
    			@RequestParam("numerotelefono") String numerotelefono, @RequestParam("email") String email, ModelAndView mv, RedirectAttributes redirectAttrs) throws ParseException {
    
    		Customer customer = new Customer();
    		.
    		.
    		.
    		.
    		
    
    @RequestMapping(value = "/updatecustdet, params="deletecust",method = RequestMethod.POST) 
    	public ModelAndView deleteCustomerByCodiceFiscale(ModelAndView mv, @PathVariable("codicefiscale") String codicefiscale)
    			throws IOException {
    
    		int counter = customerDao.deleteCustomer(codicefiscale);
    
    		if (counter > 0) {
    			mv.addObject("msg", "Cliente con codice fiscale " + codicefiscale + " eliminato");
    		} else {
    			mv.addObject("msg", "Si è verificato un errore.");
    		}
    
    		mv.setViewName("deletecustomer");
    
    		return mv;
    	}
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    andbin ha scritto:


    alex989 ha scritto:


    Siccome devo avere entrambi i button nello stesso form, come faccio ad avere due button collegati in uno stesso form con due compiti diversi?
    E perché devono essere nello stesso form? E' una richiesta specifica di qualcuno? Tieni presente che hai url di action differenti! E hai anche dati differenti, se fai un update hai più dati mentre se fai un delete pare che hai solo il codice fiscale.
    Purtroppo si, devo farlo nello stesso form. Ho provato a mettere due button nel form facendo in questo modo:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@page isELIgnored="false"%>
    <html>
    <head>
    <title>Aggiorna cliente</title>
    
    </head>
    <body>
    	<p><strong><a href="../readviewcust">Elenco clienti</a></strong></p>
    <form action="../updatecustdet" method="post">
    <pre>
    <c:forEach var="customer" items="${listCustomer}">
    <tr><th><h4>Informazioni di ${customer.cognome}  ${customer.nome}</h4></th></tr>
    Codice fiscale:    <input type="text" name="codicefiscale" value="${customer.codicefiscale}" />
    								
    Cognome:           <input type="text" name="cognome" value="${customer.cognome}" />
    		
    Nome:              <input type="text" name="nome" value="${customer.nome}" />
    	    
    Data nascita:      <input type="text" name="datanascita" value="${customer.datanascita}" />
    
    Indirizzo:         <input type="text" name="indirizzo" value="${customer.indirizzo}" />
    
    Numero telefono:   <input type="text" name="numerotelefono" value="${customer.numerotelefono}" />
    
    Email:             <input type="text" name="email" value="${customer.email}" />
    
    <tr>		    
    <input type="submit" class="button" name="editcust" value="Salva cliente" />
    <input type="submit" class="button" name="deletecust" value="Elimina" />
    </tr>	
    </c:forEach>	
    </pre>
    </form>
    ${msg}
    </body>
    </html>
    Il "Salva cliente" funziona, solo che per il button "Elimina" devo passare come parametro il codice fiscale; come si fa a passare un parametro con un form? Metto anche il codice del Controller corrispondente.
     @RequestMapping(value = "/updatecustdet", params="editcust", method = RequestMethod.POST)
    	public ModelAndView updateCustomer(@RequestParam("codicefiscale") String codicefiscale, @RequestParam("cognome") String cognome,
    			@RequestParam("nome") String nome, @RequestParam("datanascita") String datanascita, @RequestParam("indirizzo") String indirizzo, 
    			@RequestParam("numerotelefono") String numerotelefono, @RequestParam("email") String email, ModelAndView mv, RedirectAttributes redirectAttrs) throws ParseException {
    
    		Customer customer = new Customer();
    		.
    		.
    		.
    		.
    		
    
    @RequestMapping(value = "/updatecustdet, params="deletecust",method = RequestMethod.POST) 
    	public ModelAndView deleteCustomerByCodiceFiscale(ModelAndView mv, @PathVariable("codicefiscale") String codicefiscale)
    			throws IOException {
    
    		int counter = customerDao.deleteCustomer(codicefiscale);
    
    		if (counter > 0) {
    			mv.addObject("msg", "Cliente con codice fiscale " + codicefiscale + " eliminato");
    		} else {
    			mv.addObject("msg", "Si è verificato un errore.");
    		}
    
    		mv.setViewName("deletecustomer");
    
    		return mv;
    	}
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    Te lo hanno già detto in due, ora mi ci aggiungo: fai due form diverse.
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    SpiritoLibero ha scritto:


    Te lo hanno già detto in due, ora mi ci aggiungo: fai due form diverse.
    non posso fare due form diversi, DEVO farlo tutto in uno
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    alex989 ha scritto:


    non posso fare due form diversi, DEVO farlo tutto in uno
    Se proprio sei obbligato, ti ho dato un suggerimento su come farlo con una sola form ma forse non lo hai colto;

    due submit nella stessa form;
    a seconda di quale submit clicchi ( quindi lato client con javascript : onclick)
    cambi la action della form ( o update o delete).
    Il model che arriva alle due diverse action mappate lato server (controller) sarà lo stesso
    ma una farà l'update e l'altra la delete.

    HTH
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    In HTML5 se non sbaglio un pulsante di submit può avere il nuovo attributo formaction.
    Documentati, se ti interessa.
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    Si , non lo sapevo.

    Evita sbattimenti ( anche se non molti ) con javascript ed è sicuramente più leggibile.

    Grazie @andbin

    https://www.w3schools.com/tags/att_button_formaction.asp
  • Re: Spring MVC: Passare un parametro al di fuori di un form

    sspintux ha scritto:


    https://www.w3schools.com/tags/att_button_formaction.asp
    @alex989: esattamente questo attributo intendevo.
Devi accedere o registrarti per scrivere nel forum
12 risposte