Ciao ragazzi, stavo provando ad esercitarmi col tag form e l'aggiornamento dei dati inseriti.
Questo è la mia pagina html:
codice HTML:
<body id="body1">
<h:form prependId="false" id="dataForm">
<p:commandButton id="buttonInserisci" value="Inserisci Credito" type="submit" action="#{securityService.inserisciCredito()}" update=":dataForm" />
<p:commandButton id="buttonReset" value="Azzera Credito" type="submit" action="#{securityService.azzeraCredito()}" update=":dataForm" />
<p:panel>
<h:panelGrid columns="2">
<h:outputText value="Credito da aggiungere : "> </h:outputText> <h:inputText value="#{securityService.creditoInserito}" required="true" requiredMessage="Inserire credito" />
<h:outputText value="Credito attuale : "> </h:outputText> <h:inputText value="#{securityService.credito}"> </h:inputText> </h:panelGrid>
</p:panel>
Prodotto: <h:inputText name="prodotto" type="text" value="Aranciata" /> Prezzo: <h:inputText name="prodotto" type="text" value="3" /> <br /> Quantità: <h:inputText name="quantita" type="text" value="#{securityService.quantitaAranciata}" /> <br />
Quantità da Acquistare: <h:inputText name="quantita" type="text" value="#{securityService.quantitaDaAcquistare}" /> <br /> <p:commandButton id="buttonCompra" value="Acquista" type="submit" action="#{securityService.compraProdotto()}" /> <br />
</h:form>
</body>
e questo è il mio "back end":
codice:
public class SecurityService {
private float prezzo;
private float aliquota;
private float iva;
private String avviso;
private int quantitaAquistata;
private int quantitaAranciata = 10;
private int quantitaDaAcquistare;
private double creditoRimosso;
private double credito = 0;
private double creditoInserito = 0.0;
public double getCreditoRimosso() {
return creditoRimosso;
}
public void setCreditoRimosso(double creditoRimosso) {
this.creditoRimosso = creditoRimosso;
}
public int getQuantitaDaAcquistare() {
return quantitaDaAcquistare;
}
public void setQuantitaDaAcquistare(int quantitaDaAcquistare) {
this.quantitaDaAcquistare = quantitaDaAcquistare;
}
public int getQuantitaAranciata() {
return quantitaAranciata;
}
public void setQuantitaAranciata(int quantitaAranciata) {
this.quantitaAranciata = quantitaAranciata;
}
public double getCreditoInserito() {
return creditoInserito;
}
public void setCreditoInserito(double creditoInserito) {
this.creditoInserito = creditoInserito;
}
public double getCredito() {
return credito;
}
public void setCredito(double credito) {
this.credito = credito;
}
public float getPrezzo() {
return prezzo;
}
public void setPrezzo(float prezzo) {
this.prezzo = prezzo;
}
public float getAliquota() {
return aliquota;
}
public void setAliquota(float aliquota) {
this.aliquota = aliquota;
}
public float getIva() {
return iva;
}
public void setIva(float iva) {
this.iva = iva;
}
public String getAvviso() {
return avviso;
}
public void setAvviso(String avviso) {
this.avviso = avviso;
}
public double inserisciCredito() {
credito += creditoInserito;
return credito;
}
public double rimuoviCredito() {
credito = credito - creditoRimosso;
return credito;
}
public int compraProdotto() {
quantitaAranciata = quantitaAranciata - quantitaDaAcquistare;
credito -= 3*quantitaDaAcquistare;
return quantitaAranciata;
}
public double azzeraCredito() {
credito = 0.0;
return credito;
}
}
Ora provo a spiegare quale è il mio dubbio, all'inizio avevo due form separati, uno per la parte di "Inserimento Credito" e l'altro per la parte di "Acquisto Prodotto". Facendo così ogni volta che acquistavo il prodotto, il Credito che avevo inserito non veniva "mantenuto in memoria" ma si azzerava (private double credito = 0;) e viceversa col Credito, ogni volta che ne aggiungevo non veniva conservata la quantità di Prodotto, ma tornava a quella dichiarata (private int quantitaAranciata = 10;).
Utilizzando un solo form per entrambe le parti di gestione Credito e Prodotto i dati invece vengono tenuti in sessione, quindi se compro un Prodotto sottraggo 3 al Credito e la pagina viene aggiornata correttamente, viceversa se aggiungo del Credito la quantità di Prodotto non viene resettata ma viene mantenuta in memoria, tenendo conto di quanti prodotti ho comprato.
Qualcuno può spiegarmi perchè utilizzando un solo form riesco nel mio obiettivo mentre utilizzando due form separati no (come se la sessione si spezzasse in due parte, istanziando ogni volta la classe Security Service) ? Ho cercato un po' nelle guide, ma ancora non sono riuscito a schiarirmi le idee.
Grazie per la disponibilità