Je suis assez nouveau pour Spring et Spring Web Flow pour être précis. Je cours sur la question de ne pas être en mesure de lier la vue avec le formulaire présenter: - Voici ce que j'ai pour code: -Spring Web Flow - Formulaire vue non contraignante
Ps: Je ne sais pas quel modèle = {} ne dans le flux XML, mais c'est ce qui était disponible dans le code déjà, et le changement à AlertForm ne change pas le comportement/
a) JSP
<form:form name="alertSubmitForm" method="post" id="alertsForm" modelAttribute="alertForm">
<table class="general">
<tr>
<th>Alert Text
</th>
<td><form:textarea path="alertText" cols="50" id="alertText" style="padding-top: 11px"></form:textarea>
</td>
<td><span id="characterCount"></span>/250
</td>
<td><br/><br/><br/><br/><br/><input id="advancedAlertOptions" type="button" value="More" class="primarybtn" style="float:right;"/></td>
</tr>
<tr class="advancedAlertOptions" style="display:none">
<th>Active Date
</th>
<td><form:input path="activeDate" id="activeDate" type="date"/>
</td>
</tr>
<tr class="advancedAlertOptions" style="display:none">
<th>Expiration Date
</th>
<td><form:input id="expDate" path="expDate" type="date"/>
</td>
</tr>
<tr class="advancedAlertOptions" style="display:none">
<th>Author
</th>
<td><form:input id="author" path="author" type="text" disabled="true" value="${author}" />
</td>
</tr>
<tr class="advancedAlertOptions" style="display:none">
<th>Added on
</th>
<td><form:input id="addedDate" type="date" path="addedDate" disabled="true"/>
</td>
</tr>
</table>
<input id="cancelAddAlert" type="button" value="Cancel" class="secondarybtn" style="float:right; margin-left:20px;"/>
<input id="persistAlert" type="submit" value="Add" class="secondarybtn" style="float:right;" name="_eventId_addAlert"/>
</form:form>
b) de flux XML
<view-state id="general" view="editMember/general" model="{}" parent="#abstract-member-view">
<on-entry>
<evaluate expression="new com.company.member.alerts.AlertForm()" result="viewScope.alertForm"/>
</on-entry>
<on-render>
<evaluate expression="alertManagementService.getAlertsList(partyIdMember)" result="viewScope.alerts" />
</on-render>
<transition on="addAlert" to="general" bind="true" >
<evaluate expression="alertManagementService.addAlertToMember(alertForm,partyIdMember)" />
</transition>
</view-state>
c) Appel de service
package com.company.member.alerts;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.hibernate.SQLQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.company.domain.db.GenericDao;
@Service("alertManagementService")
@Transactional(readOnly = true)
public class AlertManagementServiceImpl implements AlertManagementService {
@Autowired
GenericDao dao;
@Override
public List<AlertForm> getAlertsList(Long memberId) {
String a = "SELECT * FROM PARTY_ALERT WHERE PARTY_ID = "+memberId+ " ORDER BY PA_ACTIVE_DATE";
SQLQuery query = dao.createSQLQuery(a);
List<Object[]> queryResults = query.list();
List<AlertForm> results = new ArrayList<AlertForm>();
for(Object[] arr : queryResults) {
AlertForm alertForm = new AlertForm();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd H:m:s");
try {
alertForm.setAlertId(Long.valueOf(arr[0].toString()));
alertForm.setMemberId(Long.valueOf(arr[1].toString()));
alertForm.setAlertText(arr[2].toString());
Date acD = df.parse(arr[3].toString());
alertForm.setActiveDate(acD);
if(arr[4]!=null) {
Date expD = df.parse(arr[4].toString());
alertForm.setExpDate(expD);
}
alertForm.setAuthor(arr[5].toString());
Date adD = df.parse(arr[6].toString());
alertForm.setAddedDate(adD);
alertForm.setAddedDate(adD);
alertForm.setActiveDate(acD);
}
catch (ParseException e) {
e.printStackTrace();
}
results.add(alertForm);
}
return results;
}
@Override
public void addAlertToMember(AlertForm alert, Long memberID) {
Date expDate;
PartyAlerts partyAlertsDB = new PartyAlerts();
if(alert.getAlertText()!=null) {
partyAlertsDB.setAlertText(alert.getAlertText());
partyAlertsDB.setActiveDate(alert.getActiveDate());
partyAlertsDB.setMemberId(memberID);
if((expDate = alert.getExpDate())!=null) {
partyAlertsDB.setInactiveDate(expDate);
}
}
else { //hardcoding into DB
partyAlertsDB.setActiveDate(new Date());
partyAlertsDB.setInactiveDate(new Date());
partyAlertsDB.setAlertText("This is a hardcoded alert");
partyAlertsDB.setMemberId(memberID);
}
dao.save(partyAlertsDB);
}
}
d) Formulaire Sauvegarde Bean
package com.company.member.alerts;
import java.io.Serializable;
import java.util.Date;
public class AlertForm implements Serializable{
private static final long serialVersionUID = 1L;
private Long alertId;
private Long memberId;
private String alertText;
private Date activeDate;
private Date expDate;
private Date addedDate;
private String author;
public AlertForm() {
}
public Long getAlertId() {
return alertId;
}
public void setAlertId(Long alertId) {
this.alertId = alertId;
}
public Long getMemberId() {
return memberId;
}
public void setMemberId(Long memberId) {
this.memberId = memberId;
}
public String getAlertText() {
return alertText;
}
public void setAlertText(String alertText) {
this.alertText = alertText;
}
public Date getActiveDate() {
return activeDate;
}
public void setActiveDate(Date activeDate) {
this.activeDate = activeDate;
}
public Date getExpDate() {
return expDate;
}
public void setExpDate(Date expDate) {
this.expDate = expDate;
}
public Date getAddedDate() {
return addedDate;
}
public void setAddedDate(Date addedDate) {
this.addedDate = addedDate;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
Le problème est que - lorsque je soumets la forme - élément AlertForm sont NULL. Le getter pour obtenir toutes les alertes sur le rendu fonctionne comme prévu.
Toute aide sera grandement appréciée.