Create Crud

di il
20 risposte

Create Crud

Questo è il codice della servlet:

try {
			
			//cattura i parametri
			int parametroId = Integer.parseInt(request.getParameter("idCandidato"));
			String parametroNome = request.getParameter("nome");
			String parametroCognome = request.getParameter("cognome");
			String parametroluogoDiNascita = request.getParameter("luogoDiNascita");
			String parametroResidenza = request.getParameter("residenza");
			int parametroeta = Integer.parseInt(request.getParameter("eta"));
			Date parametrodata = Date.valueOf(request.getParameter("data")); //data in sql
			String parametroInviaDati = request.getParameter("buttonInviaDati");
			
			//crea l'attributo
			request.setAttribute("mioIdCandidato", parametroId);
			request.setAttribute("mioNomeCandidato", parametroNome);
			request.setAttribute("mioCognomeCandidato", parametroCognome);
			request.setAttribute("mioLuodoDiNascitaCandidato", parametroluogoDiNascita);
			request.setAttribute("mioResidenzaCandidato", parametroResidenza);
			request.setAttribute("mioEtaCandidato", parametroeta);
			request.setAttribute("mioDataCandidato", parametrodata);
			
			//Richiama il metodo crea candidato
			Candidato newCandidato = new Candidato(parametroId, parametroNome, parametroCognome, parametroluogoDiNascita, parametroResidenza, parametroeta, parametrodata);
			cImpl.creaCandidato(newCandidato);
			
			.........
			
			RequestDispatcher vista = request.getRequestDispatcher("index.jsp");
			vista.forward(request, response);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

Il problema nella servlet devo creare insert, richiamando il paramentro buttonInviaDati del form, come devo continuare??
il metodo creaCandidato crea
questo è il codice jsp:

<form action="CandidatoServlet" method="GET">
			Id Candidato: <input type="text" name="idCandidato" class="posId" />
			<br /> 
			Nome: <input type="text" name="nome" class="posNome" /> <br />
			Cognome: <input type="text" name="cognome" class="posCognome" /> <br />
			Luogo di Nascita: <input type="text" name="luogoDiNascita" class="posLuogoDiNascita" /> <br /> 
			Residenza: <input type="text" name="residenza" class="posResidenza" /> <br /> 
			eta: <input type="text" name="eta" class="posEta" /> <br /> 
			data: <input type="text" name="data" class="posData" /> <br /> <br /> 
			<input type="submit"class="posCandidato"  name="buttonInviaDati" value='<c:out value="${}"/>' />
		</form>

20 Risposte

  • Re: Create Crud

    robot ha scritto:


    Il problema nella servlet devo creare insert, richiamando il paramentro buttonInviaDati del form, come devo continuare??
    Innanzitutto l'invio di un form si fa generalmente in POST, non in GET. Quindi implementa il doPost, estrai i parametri e fai la creazione.
  • Re: Create Crud

    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		CandidatoJdbcImpl cImpl = new CandidatoJdbcImpl();
    
    		System.out.println("Mi trovo nella classe --> CandidatoServlet");
    
    		// carica tabella restituendo tutti i valori
    		try {
    			List<Candidato> cList = cImpl.getAllCandidato();
    			request.setAttribute("listCandidato", cList);
    
    			RequestDispatcher vista = request.getRequestDispatcher("index.jsp");
    			vista.forward(request, response);
    
    		} catch (ParseException e) {
    			e.printStackTrace();
    		}
    
    		// Crea Candidato
    		try {
    
    			// cattura i parametri
    			int parametroId = Integer.parseInt(request.getParameter("idCandidato"));
    			String parametroNome = request.getParameter("nome");
    			String parametroCognome = request.getParameter("cognome");
    			String parametroluogoDiNascita = request.getParameter("luogoDiNascita");
    			String parametroResidenza = request.getParameter("residenza");
    			int parametroeta = Integer.parseInt(request.getParameter("eta"));
    			Date parametrodata = Date.valueOf(request.getParameter("data")); // data in sql
    
    			// crea l'attributo
    			request.setAttribute("mioIdCandidato", parametroId);
    			request.setAttribute("mioNomeCandidato", parametroNome);
    			request.setAttribute("mioCognomeCandidato", parametroCognome);
    			request.setAttribute("mioLuodoDiNascitaCandidato", parametroluogoDiNascita);
    			request.setAttribute("mioResidenzaCandidato", parametroResidenza);
    			request.setAttribute("mioEtaCandidato", parametroeta);
    			request.setAttribute("mioDataCandidato", parametrodata);
    
    			// Richiama il metodo crea candidato
    			Candidato newCandidato = new Candidato(parametroId, parametroNome, parametroCognome,
    					parametroluogoDiNascita, parametroResidenza, parametroeta, parametrodata);
    			cImpl.creaCandidato(newCandidato);
    			
    			if(parametroId == 0 && parametroNome == null && parametroCognome == null && parametroluogoDiNascita == null && parametroResidenza == null && parametroeta == 0 && parametrodata == null)
    				System.exit(0);
    				
    			RequestDispatcher vista = request.getRequestDispatcher("index.jsp");
    			vista.forward(request, response);
    
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    		//aggiorna candidato
    		try {
    			// cattura i parametri
    			int parametroId = Integer.parseInt(request.getParameter("idCandidato"));
    			String parametroNome = request.getParameter("nome");
    			String parametroCognome = request.getParameter("cognome");
    			String parametroluogoDiNascita = request.getParameter("luogoDiNascita");
    			String parametroResidenza = request.getParameter("residenza");
    			int parametroeta = Integer.parseInt(request.getParameter("eta"));
    			Date parametrodata = Date.valueOf(request.getParameter("data")); // data in sql
    
    			// crea l'attributo
    			request.setAttribute("mioIdCandidato", parametroId);
    			request.setAttribute("mioNomeCandidato", parametroNome);
    			request.setAttribute("mioCognomeCandidato", parametroCognome);
    			request.setAttribute("mioLuodoDiNascitaCandidato", parametroluogoDiNascita);
    			request.setAttribute("mioResidenzaCandidato", parametroResidenza);
    			request.setAttribute("mioEtaCandidato", parametroeta);
    			request.setAttribute("mioDataCandidato", parametrodata);
    			
    			//aggiorna il candidato
    			String scelta = "";
    			String update = request.getParameter("aggiornamento"); //scelgo il pulsante aggiornamento
    			
    			if(scelta.equals(update))
    				cImpl.aggiornaCandidato(parametroNome, parametroCognome, parametroluogoDiNascita, parametroResidenza, parametroeta, parametrodata, parametroId);
    			
    			RequestDispatcher vista = request.getRequestDispatcher("index.jsp");
    			vista.forward(request, response);
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    

    ho fatto il create e update, quando dico di andare su update di fare l'aggiornamento non va
  • Re: Create Crud

    robot ha scritto:


    ho fatto il create e update, quando dico di andare su update di fare l'aggiornamento non va
    Scusa ma .... hai fatto lista, insert e update TUTTI insieme in un doGet??

    No no no. Non ha assolutamente senso.
  • Re: Create Crud

    Come bisogna fare in pratica:
    Post -> create,delete
    Get-> read

    Va bene in questo modo?
  • Re: Create Crud

    robot ha scritto:


    Come bisogna fare in pratica:
    Post -> create,delete
    Get-> read

    Va bene in questo modo?
    "Nì", nel senso che bisogna anche vedere gli url e quante/quali Servlet intendi fare. Il tuo scenario non è REST, sei da una interfaccia utente HTML che può usare solo link o form e quindi i "verbi" sono limitati a GET e POST.

    Descrivi quale sequenza dovrebbe fare l'utente per gestire i candidati, partendo da una pagina di lista dei candidati.
  • Re: Create Crud

    C'È una pagina con caricamento tabella da SQL
    Form per inserimento dati per aggiungere record
    Form per aggiornare i record
    Form per cancellare record
  • Re: Create Crud

    Il tutto solo ed in unica pagina jsp
  • Re: Create Crud

    Ed 1 solo servlet
  • Re: Create Crud

    robot ha scritto:


    Il tutto solo ed in unica pagina jsp

    robot ha scritto:


    Ed 1 solo servlet
    Solo una servlet ed una jsp?? Verrebbe più difficile (oltre che meno buono come design, la servlet farebbe "troppe" cose ...).

    Giusto come scenario ipotetico:

    Una servlet ListaCandidatiServlet mappata su un url blablabla/lista-candidati.html
    - il doGet() estrae tutti i candidati e poi fa passare con forward ad una jsp es. lista-candidati.jsp

    Una servlet EditazioneCandidatoServlet mappata su un url blablabla/editazione-candidato.html
    - il doGet() verifica innanzitutto se viene passato un id (es. blablabla/lista-candidati.html?id=12345 ), quindi:
    --- Se c'è Id, legge da DB il candidato e poi fa passare con forward ad una jsp es. editazione-candidato.jsp in cui vengono riempiti i campi (con il Id come campo "hidden")
    --- Se non c'è Id, fa passare sempre a editazione-candidato.jsp ma per avere il form "vuoto" e pronto per un inserimento da parte dell'utente.
    - il doPost() si occupa di aggiornare O inserire il candidato su DB, a seconda se c'è il parametro Id o no al submit del form.

    Quando si fa un post ci sono sempre i soliti problemi del potenziale resubmit da parte dell'utente. Per evitare questi problemi si usa spesso il pattern Post/Redirect/Get. Quindi nel doPost() puoi fare un redirect (quindi un GET che farà poi il browser) o alla lista o alla pagina di editazione.

    Riguardo la eliminazione .... è da vedere, perché bisogna considerare alcuni aspetti. La eliminazione da dove parte? Dalla pagina di lista o dalla pagina di editazione del candidato? Se parte dalla lista, vuoi presentare prima una pagina di dettaglio (non modificabile) del candidato con la conferma della eliminazione? Fatta la eliminazione, vuoi tornare sulla lista o su una pagina che conferma la eliminazione?


    Quello che vorrei farti capire è che in questi casi bisogna "ragionare" bene sul flusso delle richieste fatte dal browser e quindi come avviene la navigazione tra le varie pagine. Non "fissarti" solo sul "voglio solo una jsp e una servlet".
  • Re: Create Crud

    Ciao, Grazie, faccio come dice Lei.
    Faccio più servlet e più pagine, in modo che la gestione avviane più facilmente
  • Re: Create Crud

    Ultima cosa:

    Se io voglio che la pagina si indirizza alla servlet e alla pagina jsp

    <a href="./MiaServlet/miaPagina.jsp">Update</a>

    In questo modo non funziona.

    Come bisogna fare per far capire che deve indirizzarsi alla servlet e alla pagina??
  • Re: Create Crud

    robot ha scritto:


    Se io voglio che la pagina si indirizza alla servlet e alla pagina jsp

    <a href="./MiaServlet/miaPagina.jsp">Update</a>

    In questo modo non funziona.

    Come bisogna fare per far capire che deve indirizzarsi alla servlet e alla pagina??
    La questione è posta un po' male. Le pagine JSP possono anche essere accedute direttamente su HTTP (da browser), se sono al di fuori della WEB-INF/. Ma se si usano le Servlet, tipicamente l'approccio è il seguente: gli url sono mappati alle servlet, che fanno le elaborazioni e poi eseguono un "forward" (che è un passaggio "interno" alla applicazione) ad una jsp che tipicamente è sotto WEB-INF, in modo che sia nascosta ai client.

    Es.
    client ----request----> Servlet ----forward----> /WEB-INF/views/xyz.jsp
  • Re: Create Crud

    Questa è la pagina: index.jsp

    <td><a href="./delete.jsp">Delete</a></td>

    Questa è la pagina: delete.jsp
    
    <form action="CancellaTabellaServlet" method="GET">
    			Id Candidato: <input type="text" name="idCandidato" class="posId" />
    			<br /><br />
    			<input type="submit"class="posCandidato"  value="cancellaCandidato"  />
    		</form>
    
    Questa è la servlet:
    
    @WebServlet("/CancellaTabellaServlet")
    public class CancellaTabellaServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
       
     
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// cancella candidato
    		try {
    			CandidatoJdbcImpl cImpl = new CandidatoJdbcImpl();
    			System.out.println("Mi trovo nella classe --> CandidatoServlet --> Delete");
    			// cattura i parametri
    			int parametroId = Integer.parseInt(request.getParameter("idCandidato"));
    
    			// cancella il candidato
    			cImpl.rimuoviCandidato(parametroId);
    			
    			// crea l'attributo
    			request.setAttribute("mioIdCandidato", parametroId);
    
    			RequestDispatcher vista = request.getRequestDispatcher("delete.jsp");
    			vista.forward(request, response);
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    
    }
    
    
    In pratica in index, a posto di usare href e utilizzo button per andare in pagina delete con servlet, come bisogna fare??

    Grazie
  • Re: Create Crud

    robot ha scritto:


    
    <form action="CancellaTabellaServlet" method="GET">
    			Id Candidato: <input type="text" name="idCandidato" class="posId" />
    
    Ma perché chiedi il Id all'utente?? Detto in generale (poi ovviamente ci possono essere casi speciali/particolari) degli "id" (che spesso sono gli id "tecnici" su DB) all'utente tipicamente non gliene può fregare di meno.
    E comunque una cancellazione andrebbe fatta in POST, non in GET.
Devi accedere o registrarti per scrivere nel forum
20 risposte