Visualizzazione dei risultati da 1 a 6 su 6

Discussione: Applicazione Web

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    8

    Applicazione Web

    Premetto che non sapevo bene dove inserire questo messaggio visto che l'argomento tratta di java, jsf, spring, hibernate ecc ecc

    Allora, il mio obiettivo era il seguente: avere un interfaccia grafica web realizzata con jsf, in cui ho delle voci: "Inserire un libro", cancellarlo, cercare un libro e modificarlo.
    La pagina è molto banale, quindi non vi invio il codice, se dovesse servire fatemi sapere.

    Detto ciò, per ogni voce del menù mi indirizza ad una pagina specifica.
    Analizziamo la pagina di inserimento.

    Devo inserire il codice isbn del libro, il titolo, l'autore e il numero di libri che dispongo (lo scopo è quello di simulare una specie di negozio).

    Una volta inseriti i dati controllo che siano corretti (valori non nulli ecc) e fin qui tutto ok.
    Arrivata a questo punto premo il bottone "Inserisci Libro"...e boom X_D
    Ho messo che i valori che inserisco nel form vanno a popolarmi un bean.
    Al mio bottone associo come action l'attivazione di un metodo in una classe di gestione delle transazioni nel DB, che dovrebbe prendere il bean popolato, e farci quello che deve fare.
    Per la gestione del DB uso Hibernate, ma quello è tutto sistemato, non ho problemi.
    Il mio problema sta nel prendere il bean popolato e lavorarci su...non mi è chiaro come avviene il passaggio di parametri...io avevo fatto una mezza schifezza che ora vi riporto, ma sono sicura che esiste un modo più semplice.
    Vi allego il codice del mio bean che rappresente il libro, della classe che gestisce le transizioni (GestoreAzioni), della JSF dell'inserimento e delle due pagine che vengono visualizzate in base all'esito dell'inserimento che sono una pagina con su scritto che ha effettuato l'inserimento, oppure nel caso l'ISBN combaciasse con un altro libro gli dice che gia esiste, ma che volendo può aggiornare il numero di copie di quel libro possedute. Cosa strana è che in quest'ultima pagina ho messo un pulsante che dovrebbe ricondurmi alla mia Home, invece mi riconduce sempre alla pagina di inserimento O_O
    Comunque quello che vorrei è che qualcuno mi consigliasse come trattare il bean, che come vedrete ho fatto una schifezza...

    Questo è il bean che rappresenta il libro
    codice:
    @ManagedBean
    public class Book {
    
    	private String isbn;
    	private String titolo;
    	private String autore;
    	private int quantita;
    	
    	public String getIsbn() {
    		return isbn;
    	}
    	public String getTitolo() {
    		return titolo;
    	}
    	public String getAutore() {
    		return autore;
    	}
    	
    	public void setIsbn(String isbn) {
    		this.isbn = isbn.trim();
    	}
    	public void setTitolo(String titolo) {
    		if (titolo.trim().equals(""))
    			this.titolo = "";
    		else
    			this.titolo = titolo;
    	}
    	public void setAutore(String autore) {
    		if (autore.trim().equals(""))
    			this.autore = "";
    		else
    			this.autore = autore;
    	}
    	
    	public int getQuantita() {
    		return quantita;
    	}
    	public void setQuantita(int quantita) {
    		this.quantita = quantita;
    	}
    	
    	@Override
    	public String toString() {
    		return "Book [isbn=" + isbn + ", titolo=" + titolo + ", autore="
    				+ autore + ", quantita=" + quantita + "]";
    	}
    }
    Questa è la classe schifosa che gestisce la transizioni
    codice:
    @ManagedBean
    public class GestoreAzioni {
    
    	private Book book = new Book();
    	private String esito;
    		
    	
    
    	public String insert() {		
    		System.out.println("Inserimento");
    		BeanFactory ctx = new XmlBeanFactory(new ClassPathResource("beans.xml"));														
    		BookDao bookDao = (BookDao)ctx.getBean("BookDao");
    		
    		List<Book> lista = bookDao.findByIsbn(book.getIsbn());
    		int l = lista.size();
    		
    		if (l==0) {
    			bookDao.insert(book);
    			return "inserimentoEffettuato";
    		}
    		else {
    			book = lista.get(0);
    			return "inserimentoLibroPresente";
    		}
    	}
    }
    (Vi ometto il resto del codice, per ora consideriamo solo l'inserimento, tanto credo che una volta risolto questo problema posso risolvere anche gli altri)

    La JSF dove gestisco l'inserimento
    (NOTARE il gestoreAzioni.book.VariaRoba!! Ho dovuto escogitare questo stratagemma per poter accedere ai valori del bean -.-)
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core">
    
    
    <h:head>
    	<link href="./css/styles.css" rel="stylesheet" type="text/css" />
    </h:head>
    
    <h:body>
    	
    	<center>Inserimento</center>
    	
    
    	
    
    	
    
    
    	<center>
    		<h:form>
    			<table>
    				<tr>
    					<td>ISBN:</td>
    					<td><h:inputText value="#{gestoreAzioni.book.isbn}" required="true"
    							requiredMessage="Inserire il codice ISBN."
    							validatorMessage="La lunghezza obbligatoria è 8 caratteri."
    							id="isbn">
    
    							<f:validateLength minimum="8" maximum="8" />
    
    						</h:inputText></td>
    					<td><h:message for="isbn" styleClass="error" /></td>
    				</tr>
    
    				<tr>
    					<td>Titolo:</td>
    					<td><h:inputText value="#{gestoreAzioni.book.titolo}" required="true"
    							requiredMessage="Inserire il titolo del libro."
    							validatorMessage="La lunghezza massima è 40 caratteri."
    							id="titolo">
    
    							<f:validateLength maximum="40" />
    
    						</h:inputText></td>
    					<td><h:message for="titolo" styleClass="error" /></td>
    				</tr>
    
    				<tr>
    					<td>Autore:</td>
    					<td><h:inputText value="#{gestoreAzioni.book.autore}" required="true"
    							requiredMessage="Inserire l'autore del libro."
    							validatorMessage="La lunghezza massima è 40 caratteri."
    							id="autore">
    
    							<f:validateLength maximum="40" />
    
    						</h:inputText></td>
    					<td><h:message for="autore" styleClass="error" /></td>
    				</tr>
    
    				<tr>
    					<td>Quantita:</td>
    					<td><h:inputText value="#{gestoreAzioni.book.quantita}" required="true"
    							requiredMessage="Inserire quanti libri si hanno a disposizione."
    							validatorMessage="Devi averne almeno 1" 
    							id="quantita">
    							
    							<f:validateDoubleRange minimum="1" />
    
    						</h:inputText></td>
    					<td><h:message for="quantita" styleClass="error" /></td>
    				</tr>
    			</table>
    
    			
    
    			
    
    			
    
    
    			<h:commandButton type="submit" value="Inserisci" 
    			action="#{gestoreAzioni.insert}"/>
    
    		</h:form>
    
    	</center>
    
    </h:body>
    
    
    </html>
    Questa è la pagina visualizzata se trova il libro nell'elenco quindi ti propone di aggiornarlo
    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:p="http://primefaces.prime.com.tr/ui">
    
    <h:head>
    	<link href="./css/styles.css" rel="stylesheet" type="text/css" />
    </h:head>
    
    <h:body class="inserimentoLibroPresente">
    
    	E' stato trovato un altro libro con il codice ISBN indicato. 
    
    	E' possibile modificare il numero di volumi presenti in archivio:
    	
    
    	
    
    
    	<form>
    		<table>
    			<tr>
    				<td>ISBN</td>
    				<td>TITOLO</td>
    				<td>AUTORE</td>
    				<td>QUANTITA</td>
    			</tr>
    
    			<tr>
    				<td>#{gestoreAzioni.book.isbn}</td>
    				<td>#{gestoreAzioni.book.titolo}</td>
    				<td>#{gestoreAzioni.book.autore}</td>
    				<td><p:spinner value="#{book.quantita}" /></td>
    			</tr>
    		</table>
    
    		<h:commandButton type="submit" value="Aggiorna"
    			action="#{gestoreAzioni.update}" />
    
    	</form>
    
    </h:body>
    
    
    </html>
    Notare che nel metodo update del gestoreAzioni non ci va mai, appena clicco mi rimanda a "Inserimento Libro" -.-

    Spero che qualcuno mi sappia aiutare, ho come l'impressione che ho una lacuna che mi impedisce di collegare le cose...

  2. #2

    Moderazione

    Ti sposto in Java.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Rispondo prima di tutto all'ultima domanda "update".
    Nel Bean riportato non esiste il metodo update (#{gestoreAzioni.update}) e quindi jsf non sa come comportarsi.
    La prima domanda è un pò più complessa perchè riguarda lo scope dei bean, argomento che ho trattato non da molto tempo link che ti consiglio vivamente di leggere.
    Se vuoi mantenere la separazione dei due Bean, cioè il Bean Book che raccoglie i dati e il Bean GestoreAzioni allora devi dichiararli entrabi o in @ViewScope o in @SessionScope.
    Fatto questo nel Bean GestoreAzioni puoi dichiarare una managed property del Bean Book sul quale effettuare l'azione.
    Un'altro metodo potrebbe essere quello di eliminare il Bean Book e dichiare una proprietà di tipo book all'interno del Bean GestoreAzioni in questo modo potresti evitare di dichiare questo bean in @ViewScope.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    8
    Guarda, rispondo alla prima cosa che mi hai detto, cioè che manca il metodo update...nel pezzo di codice che ti ho copiato non l'ho messo, ma nella classe ci sta...e ritornava semplicemente una pagina..tra l'altro non è il metodo update il problema, perchè mettendo un indirizzamento diretto nella pagina jsf ad un'altra pagina jsf, comunque mi torna nella pagina di inserimento!!

  5. #5
    Infatti io non avevo detto che era quello il problema.
    Ho riguardato il codice ed cosa è saltato fuori:
    codice:
    <form>
    .....
    </form>
    Ovvio che nn funzionasse devi usare un <h:form>....
    Consiglio nn mischiare i tag html con jsf utilizza solo i secondi...

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    8
    ... -.- piccola svista -.-
    Grazie *.*

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.