Sto utilizzando Spring STS per creare una web application.
Utilizzo SQL Server come database.
Utilizzo Hibernate per la validazione dei dati e JPA
Ho fatto la form di inserimento prodotti indicando tutti i campi necessari.
Effettuato il submit della form, nel controller ho il metodo "GestInsProdotti" con RequestMapping "/aggiungi" e metodo POST che, dopo aver effettuato la validazione dei campi deve effettuare l'inserimento del record.
Il record non viene inserito perchè vengono rilevati errori nei campi ricevuti.
Mettendo in debug noto che i campi ricevuti tramite la notazione @ModelAttribute (che fa riferimento ai dati della form, non sono impostati come quelli
inseriti a form, ma sono Null.
Non riesco a capire il perchè la form (pagina .jsp) non passa in mnaiera corretta i campi.
ecco il codice della pagina insProdotti.jsp
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- Form originale con select sui campi categoria ecc con relazioni 2019/02/05 -->
<div class="jumbotron jumbotron-billboard">
<div class="img"></div>
<div class="container">
<div class="row">
<div class="col-lg-12">
<h2>${Titolo}</h2>
<p>${Titolo2}</p>
</div>
</div>
</div>
</div>
<section class="container">
<div class="portlet light bordered">
<div class="portlet-title">
<div class="caption font-red-sunglo">
<i class="icon-settings oi oi-pencil"></i>
<span class="caption-subject bold uppercase"><spring:message code="insprodotto.form.titolo.label"/></span>
</div>
<ul class="nav nav-form" id="account-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="dati-tab" data-toggle="tab" href="#dati1" role="tab" aria-controls="dati1" aria-selected="true">
<spring:message code="insprodotto.form.tab1.label"/>
<img src="<c:url value="/img/icoxx.png" />">
</a>
</li>
<li class="nav-item">
<a class="nav-link" id="avatar-tab" data-toggle="tab" href="#dati2" role="tab" aria-controls="dati2" aria-selected="false">
<spring:message code="insprodotto.form.tab2.label"/>
</a>
</li>
<li>
<a class="nav-link" id="utenti-tab" data-toggle="tab" href="#dati3" role="tab" aria-controls="dati3i" aria-selected="false">
<spring:message code="insprodotto.form.tab3.label"/>
</a>
</li>
</ul>
<section class = "locale-link">
<a href="?language=en"><img src="<c:url value="/img/US.png" />"></a> -
<a href="?language=it"><img src="<c:url value="/img/IT.png" />"></a>
</section>
</div>
<!-- <div class="portlet-body form"> -->
<!-- Tab panes -->
<!-- Tab Dati utente -->
<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" enctype="multipart/form-data" 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>
<!-- Form Dati Utente -->
<div class="tab-pane fade" id="dati2" role="tabpanel" aria-labelledby="avatar-tab">
<!--
<form:form method="POST" modelAttribute="newProdotto">
<form:errors path="*" cssClass="alert alert-danger" element="div"/>
<div class="form-group">
<label for="keyUserOp"><spring:message code="insprodotto.form.dispon.label"/></label>
<form:input id="keyUserOp" path="keyUserOp" type="text" class="form-control" placeholder="Operatore"/>
<form:errors path="keyUserOp" cssClass="text-danger"/>
</div>
</form:form> -->
</div>
</div>
<hr class="line-form">
</div>
</section>
ecco il codice della classe controller
@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";
}
Vi sarei grato se poteste aiutarmi a capire perchè nel modelAttribute "newProdotto" non vengono passati i campi della form, ma solo campi a null.
Resto a disposizione per ogni chiarimento.
grazie
Moreno