Database 改变弹簧映射行为
我在控制器中的保存方法有问题 我有一张带旅行的表格,还有一张可选的回程表 我尝试做的是,如果travel2所有字段都已填充,则保存travel1+travel2 除此之外,只有旅行1 但是日志说我不能,因为它在注释之前的某个地方失败了 编辑:如果未填写日期,则会崩溃Database 改变弹簧映射行为,database,spring,controller,mapping,Database,Spring,Controller,Mapping,我在控制器中的保存方法有问题 我有一张带旅行的表格,还有一张可选的回程表 我尝试做的是,如果travel2所有字段都已填充,则保存travel1+travel2 除此之外,只有旅行1 但是日志说我不能,因为它在注释之前的某个地方失败了 编辑:如果未填写日期,则会崩溃 #2result:org.springframework.validation.BeanPropertyBindingResult: 1 errors Field error in object 'FormModel' on fie
#2result:org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'FormModel' on field 'travel2.traveldate': rejected value []; codes [typeMismatch.FormModel.travel2.traveldate,typeMismatch.travel2.traveldate,typeMismatch.traveldate,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [FormModel.travel2.traveldate,travel2.traveldate]; arguments []; default message [travel2.traveldate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'travel2.traveldate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [java.util.Date] for value ''; nested exception is java.lang.IllegalArgumentException]
那么,如何在不在DB中设置允许为null的情况下更改行为呢
@RequestMapping(value = "/users", method = RequestMethod.POST)
public String saveOrUpdateUser(@ModelAttribute("FormModel") @Validated FormModel formmodel,
BindingResult result, Model model, final RedirectAttributes redirectAttributes) {....
if (result.hasErrors()) {
System.out.println("#2result:"+result);
//IF ...(formmodel.getTravel2().allFilled())
//travelService.save(formmodel.getTravel(),formmodel.getTravel2());
formmodel包装器类:
public class FormModel {
private User user;
private Costcenter costcenter;
private Travel travel;
private Travel travel2;...
表格:
<form:hidden path="travel2.t_id" />
<spring:bind path="travel2.traveldate">
<div class="form-group has-feedback${status.error ? 'has-error' : ''}">
<label class="col-md-2 control-label">Travel Date</label>
<div class="col-md-10">
<form:input path="travel2.traveldate" class="form-control"
id="datepicker2" type="text" placeholder="Traveldate" />
<span class="glyphicon glyphicon-calendar form-control-feedback"></span>
<form:errors path="travel2.traveldate" class="control-label" />
</div>
</div>
</spring:bind>
在错误日志中,清楚地提到了类型与您的旅行类中的属性travelDate不匹配。您可能在域类中使用日期类型,但当您在UI页面中为同一字段填充值时,它将以字符串格式发布值。尝试使用以下参考更改travelDate的getter和setter方法的代码
private Date createdOn;
public String getCreatedOn() {
String dateInString=null;
if(createdOn!=null){
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
dateInString = df.format(createdOn);
}
return dateInString;
}
public void setCreatedOn(String createdOn) {
try {
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
this.createdOn = sdf.parse(createdOn);
} catch(ParseException e) {
this.createdOn=null;
}
}
如果这似乎不起作用,请发布UI页面的代码 发布您的
Travel
classthx,但日期类型问题在周五得到解决。现在的问题是,如果我没有travel2->获得错误日期的值。如果我选择一个日期,它会起作用。但我会检查的
public class Travel {
Integer t_id;
Date traveldate;
Time starttime;
String start;
String destination;
public Integer gett_id() {
return t_id;
}
public void sett_id(Integer t_id) {
this.t_id = t_id;
}...
public boolean allFilled(){
if (traveldate!=null && starttime!= null
&& start !=null && start !=""
&& destination != null && destination != ""){
return true;
} else {
return false;
}
}....
private Date createdOn;
public String getCreatedOn() {
String dateInString=null;
if(createdOn!=null){
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
dateInString = df.format(createdOn);
}
return dateInString;
}
public void setCreatedOn(String createdOn) {
try {
SimpleDateFormat sdf=new SimpleDateFormat("dd/MM/yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
this.createdOn = sdf.parse(createdOn);
} catch(ParseException e) {
this.createdOn=null;
}
}