SpringWeb流-表单未绑定视图
准确地说,我对Spring和SpringWebFlow是相当陌生的。 我遇到了无法在提交时将视图与表单绑定的问题:- 以下是我的代码:- 另外:我不知道model={}在流XML中做了什么,但这是代码中已经提供的,将其更改为alertForm不会改变行为/ a) JSP 问题是-当我提交表单时-alertForm元素为空。获取渲染上所有警报的getter按预期工作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
我们将非常感谢您的帮助 如果您是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>