Sto sviluppando con Spring MVC (versione 4.0) una web application.
Ho una classe prodotti con 3 campi relazionati con @manytoOne verso tabelle correlate.
descrizione classe prodotti
package com.sifhb.webapp.entities;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.Digits;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Range;
import com.sifhb.webapp.entities.T_Categoria;
import com.sifhb.webapp.entities.T_Tipologia;
@Entity
@Table(name="PRODOTTI")
public class Prodotti implements Serializable {
/**
*
*/
private static final long serialVersionUID = 4758948296951581391L;
private int idProdotto;
private String descrProdotto;
private int dispon;
private int scomin;
private float prezzo;
private int qtavend;
private String pathImange;
private int keyUserOp;
private Date dateOp;
private int idStatoprodotto;
// relazioni
private T_Categoria tcategoria;
private T_Tipologia ttipologia;
private T_Competenza tcompetenza;
public Prodotti()
{
}
@Id
@Column(name= "IdProdotto", unique = true,nullable = false)
@NotNull(message = "{NotNull.Prodotto.IdProdotto.validation}")
public int getIdProdotto() {
return idProdotto;
}
public void setIdProdotto(int idProdotto) {
this.idProdotto = idProdotto;
}
@Column(name= "DescrizioneProdotto",nullable = true)
@NotNull(message="Inserire la Descrizione del Prodotto")
@Size(min=2, max=50, message = "{Size.Prodotto.descrProdotto.validation}")
public String getDescrProdotto() {
return descrProdotto;
}
public void setDescrProdotto(String descrProdotto) {
this.descrProdotto = descrProdotto;
}
@Column(name= "Disponibile")
@NotNull(message="Inserire la Disponibilità del prodotto")
@Min(value = 1,message="la Disponibilità minima 1 pezzo")
@Max(value = 999,message="la Disponibilità massima 999 pezzi")
public int getDispon() {
return dispon;
}
public void setDispon(int dispon) {
this.dispon = dispon;
}
@Column(name= "ScortaMinima")
@Digits(integer=4, fraction=0,message="{Digits.Prodotti.Scomin.validation}")
@NotNull(message="Inserire la Scorta Mionima del prodotto")
@Min(value = 1,message="la scorta minima può essere 1 pezzo")
@Max(value = 999,message="la scorta minima non può essere maggiore della disponibilità")
public int getScomin() {
return scomin;
}
public void setScomin(int scomin) {
this.scomin = scomin;
}
@Column(name= "Prezzo")
@Digits(integer=4, fraction=2,message="{Digits.Prodotti.Prezzo.validation}")
@NotNull(message="Inserire il prezzo del prodotto")
@Min(value = 0 ,message="il Prezzo deve essere positivo")
@Max(value = 999,message="il prezzo non può essere maggiore di 999")
@Range(min = 01, message = "il Prezzo non può essere negativo")
public float getPrezzo() {
return prezzo;
}
public void setPrezzo(float prezzo) {
this.prezzo = prezzo;
}
@Column(name= "QtaVendute")
@NotNull(message="Inserire la quantità del prodotto")
@Min(value = 0 ,message="la Quantità deve essere positiva")
@Max(value = 999,message="la Quantità non può essere maggiore di 999")
public int getQtavend() {
return qtavend;
}
public void setQtavend(int qtavend) {
this.qtavend = qtavend;
}
@Column(name= "PathImage")
public String getPathImange() {
return pathImange;
}
public void setPathImange(String pathImange) {
this.pathImange = pathImange;
}
@Column(name= "KeyUtentiOperation")
public int getKeyUserOp() {
return keyUserOp;
}
public void setKeyUserOp(int keyUserOp) {
this.keyUserOp = keyUserOp;
}
@Column(name= "DataOperation")
public Date getDateOp() {
return dateOp;
}
public void setDateOp(Date dateOp) {
this.dateOp = dateOp;
}
@Column(name= "IdStatoProdotto")
public int getIdStatoprodotto() {
return idStatoprodotto;
}
public void setIdStatoprodotto(int idStatoprodotto) {
this.idStatoprodotto = idStatoprodotto;
}
@ManyToOne(optional = false)
@JoinColumn(name = "Categoria", nullable = false)
public T_Categoria getTcategoria() {
return tcategoria;
}
public void setTcategoria(T_Categoria tcategoria) {
this.tcategoria = tcategoria;
}
@ManyToOne(optional = false)
@JoinColumn(name = "Tipologia", nullable = false)
public T_Tipologia getTtipologia() {
return ttipologia;
}
public void setTtipologia(T_Tipologia ttipologia) {
this.ttipologia = ttipologia;
}
@ManyToOne(optional = false)
@JoinColumn(name = "Competenza", nullable = false)
public T_Competenza getTcompetenza() {
return tcompetenza;
}
public void setTcompetenza(T_Competenza tcompetenza) {
this.tcompetenza = tcompetenza;
}
}
per la gestione dei dati ho una pagina .jsp in cui opero sui campi delle tabelle correlate con un oggetto combo
il codice della pagina .jsp per la modifica dei campi è la seguente
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="dati1" role="tabpanel" aria-labelledby="dati-tab">
<form:form method="POST" modelAttribute="newProdotto" action="aggiungi">
<form:errors path="*" cssClass="alert alert-danger" element="div"/>
<div class="form-body">
<div class="form-group">
<label for="idProdotto"><spring:message code="insprodotto.form.idProdotto.label"/></label>
<form:input id="idProdotto" path="idProdotto" type="text" class="form-control" placeholder="Codice Prodotto" />
<form:errors path="idProdotto" cssClass="text-danger"/>
</div>
<div class="form-group">
<label for="descrProdotto"><spring:message code="insprodotto.form.descrProdotto.label"/></label>
<form:input id="descrProdotto" path="descrProdotto" type="text" class="form-control" placeholder="Descrizione Prodotto"/>
<form:errors path="descrProdotto" cssClass="text-danger"/>
</div>
<div class="form-group">
<label for="dispon"><spring:message code="insprodotto.form.dispon.label"/></label>
<form:input id="dispon" path="dispon" type="text" class="form-control" placeholder="Disponibilita Prodotto"/>
<form:errors path="dispon" cssClass="text-danger"/>
</div>
<div class="form-group">
<label for="scomin"><spring:message code="insprodotto.form.scomin.label"/></label>
<form:input id="scomin" path="scomin" type="text" class="form-control" placeholder="Scorta Minima"/>
<form:errors path="scomin" cssClass="text-danger"/>
</div>
<div class="form-group">
<label for="prezzo"><spring:message code="insprodotto.form.prezzo.label"/></label>
<form:input id="prezzo" path="prezzo" type="text" class="form-control" placeholder="Prezzo"/>
<form:errors path="prezzo" cssClass="text-danger"/>
</div>
<div class="form-group">
<label for="tcategoria"><spring:message code="insprodotto.form.idCategoria.label"/></label>
<form:select path="tcategoria" class="form-control">
<form:options items="${categoria}" itemValue="idCategoria" itemLabel="dCategoria" />
</form:select>
</div>
<div class="form-group">
<label for="ttipologia"><spring:message code="insprodotto.form.idTipologia.label"/></label>
<form:select path="ttipologia" class="form-control">
<form:options items="${tipologia}" itemValue="idTipologia" itemLabel="dTipologia" />
</form:select>
</div>
<!-- Bottone di submit -->
<div class="form-actions">
<input type="submit" id="btnAdd" class="btn btn-primary form-buttons" value = <spring:message code="insprodotti.form.btnAdd.label"/> />
<a href="<spring:url value="/prodotti/" /> " id="btnAbort" class="btn btn-default form-buttons" >
<spring:message code="insprodotti.form.btnAbort.label"/>
</a>
</div>
</div>
</form:form>
</div>
quando effettuo il submit della form, nei campi passati del metodo GestInsProdotti del controller prodotti,
i valori delle selezioni delle combo sono passati a Null.
Dove sbaglio ?
E' sicuramente un banalissimo errore.
grazie per la pazienza e attenzione.
ciao
Moreno
@RequestMapping(value = "/aggiungi", method = RequestMethod.POST)
public String GestInsProdotti(@Valid @ModelAttribute("newProdotto") Prodotti prodotto, BindingResult result,
Model model, RedirectAttributes redirectAttributes, HttpServletRequest request)
{
System.out.println("il prodotto ricevuto da form è: " + prodotto.getDescrProdotto());
if (result.hasErrors())
{
return "insProdotto";
}
if (result.getSuppressedFields().length > 0)
throw new RuntimeException("ERRORE: Tentativo di eseguire il binding dei seguenti campi NON consentiti: "
+ StringUtils.arrayToCommaDelimitedString(result.getSuppressedFields()));
else
{
prodotto.setDateOp(date);
prodottiService.Salva(prodotto);
}
return "redirect:/prodotti";
}
Allegati: