2015-10-03 3 views
1

Я довольно новичок в Spring и Spring Web Flow, если быть точным. Я бегу в вопрос не в состоянии связать представление с формой по представить: - Вот что у меня есть для кода: -Spring Web Flow - форма, не имеющая обязательного вида

Ps: Я не знаю, что модель = {} делает в XML потока, но это то, что было доступно в уже коде, и изменить его на alertForm не изменяет поведение/

а) 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> 

б) поток 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> 

с) Обслуживание вызовов

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) Форма Резервное 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; 
    } 


} 

Вопрос заключается в том, что - когда я отправить форму - alertForm элемент являются NULL. Геттер, чтобы получить все предупреждения о рендере, работает, как и ожидалось.

Любая помощь будет высоко оценена.

ответ

0

Если вы новичок в SWF, то почему используете расширенные функции, такие как наследование потока? каково содержание родительского потока, который содержит ссылку:

... модель = «{}» родительский = «# абстрактного-член-вид»>

Это, скорее всего, источник вашей проблемы , Вам нужно явно определить атрибут model для уже инициализированного POJO, чтобы связать поля формы с ним правильно.

Таким образом, для целей тестирования для упрощения инициализации нового AlertForm в потоке, где некоторые до и вне вашего зрения государства

.... 
    <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> 

, если этот тест работает затем создать/внедрить шаблон Factory для AlertForm, чтобы избавиться от уродливый «новый» синтаксис в вашем потоке xml

 Смежные вопросы

  • Нет связанных вопросов^_^