SpringWeb流-表单未绑定视图

SpringWeb流-表单未绑定视图,spring,forms,hibernate,spring-webflow,spring-form,Spring,Forms,Hibernate,Spring Webflow,Spring Form,准确地说,我对Spring和SpringWebFlow是相当陌生的。 我遇到了无法在提交时将视图与表单绑定的问题:- 以下是我的代码:- 另外:我不知道model={}在流XML中做了什么,但这是代码中已经提供的,将其更改为alertForm不会改变行为/ a) JSP 问题是-当我提交表单时-alertForm元素为空。获取渲染上所有警报的getter按预期工作 我们将非常感谢您的帮助 如果您是SWF新手,为什么要使用流继承等高级功能?包含引用的父流的内容是什么: 。。。model=“{}”p

准确地说,我对Spring和SpringWebFlow是相当陌生的。 我遇到了无法在提交时将视图与表单绑定的问题:- 以下是我的代码:-

另外:我不知道model={}在流XML中做了什么,但这是代码中已经提供的,将其更改为alertForm不会改变行为/

a) JSP

问题是-当我提交表单时-alertForm元素为空。获取渲染上所有警报的getter按预期工作


我们将非常感谢您的帮助

如果您是SWF新手,为什么要使用流继承等高级功能?包含引用的父流的内容是什么:

。。。model=“{}”parent=“#抽象成员视图”>

这很可能是你问题的根源。您需要显式地为已经初始化的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>
。。。。
....
....

如果此测试有效,那么为AlertForm创建/实现一个工厂模式,以消除流xml中丑陋的“新”语法

如果您是SWF新手,为什么要使用流继承之类的高级功能?包含引用的父流的内容是什么:

。。。model=“{}”parent=“#抽象成员视图”>

这很可能是你问题的根源。您需要显式地为已经初始化的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>
。。。。
....
....
如果这个测试有效,那么为AlertForm创建/实现一个工厂模式,以消除流xml中难看的“新”语法

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);
    }
}
    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;
    }


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