【问题标题】:changing spring mapping behaviour改变弹簧映射行为
【发布时间】:2017-07-18 01:46:10
【问题描述】:

我在控制器中的保存方法有问题

我有一个带旅行的表格,还有一个可选的旅行回来 我尝试做的是,如果 travel2 所有字段都已填写,则保存 travel1+travel2 否则只能旅行1

但是日志说我不能,因为它之前在注释中的某个地方失败了

编辑:如果日期未填写,它会崩溃

#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]

那么如何在不设置数据库中允许的 NULLABLE 的情况下更改行为?

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

编辑: 也许我可以检查“结果” 并做类似的事情

if(no errors)-> keep going
elseif(error with date) //<<<<catch stuff here, if date not filled... result.getFieldError().getRejectedValue()==""
else show errorpage

edit2:旅行类

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

}....

【问题讨论】:

  • 发布您的Travel 课程

标签: database spring controller mapping


【解决方案1】:

在错误日志中,明确提到您的 Travel 类中的属性 travelDate 存在类型不匹配。您可能在域类中使用 Date 类型,但是当您在 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 页面的代码。

【讨论】:

  • 谢谢,但是日期类型问题在星期五解决了。如果我对旅行日期没有价值2-> 得到错误,现在就是问题所在。如果我选择一个有效的日期。但我会检查它
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 2017-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2015-11-29
  • 2021-10-03
相关资源
最近更新 更多