2015-10-03 2 views
1

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.

Répondre

0

Si vous êtes nouveau sur SWF, pourquoi utilisez-vous des fonctionnalités avancées comme l'héritage de flux? quels sont le contenu du flux parent qui contient la référence:

... modèle = « {} » parent = « # abstrait-membre vue »>

Ceci est probablement la source de votre problème . Vous devez définir explicitement l'attribut de modèle à un POJO déjà initialisé afin de lier correctement les champs de formulaire.

Donc, à des fins de test pour simplifier initialiser une nouvelle AlertForm dans le flux un peu où, si ce test fonctionne à créer puis avant et en dehors de votre état d'affichage

.... 
    <set name="alertFormModel" value="new com.company.member.alerts.AlertForm()"/> 
.... 



<!-- then when you enter the view-state define it like this: --> 


<view-state id="general" view="editMember/general" model="alertFormModel"> 
.... 
</view-state> 

/mettre en œuvre un modèle d'usine pour AlertForm de se débarrasser de la 'nouvelle' syntaxe moche dans votre flux xml