将日期参数从html表单发送到百万美元的控制器

时间:2015-04-24 08:39:03

标签: java spring spring-mvc thymeleaf

我在将日期传递给控制器​​时面临以下问题,如果我删除了日期,那么它的工作正常。

我的HTML代码是

<div class="form-group" id="all">
    <label class="col-lg-2 control-label" for="focusedInput3">Start date</label>
    <div class="col-lg-10">
        <input type="date" id="startDate" name="startDate" th:value="*{startDate}" />
    </div>
</div>
<div class="form-group" id="all">
    <label class="col-lg-2 control-label" for="focusedInput4">End date</label>
    <div class="col-lg-10">
        <input type="date" id="endDate" name="endDate" th:value="*{endDate}" />
    </div>
</div>

我的实体类是

@Column(name = "name")
private String courseName;

@Column(name = "semister")
private String semister;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat (pattern="dd-MMM-YYYY")
@Column(name = "startDate")
private Date startDate;

@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat (pattern="dd-MMM-YYYY")
@Column(name = "endDate")
private Date endDate;

单击“提交”按钮后,会出现以下错误:

enter image description here

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing  this as a fallback.

Fri Apr 24 14:05:33 IST 2015
There was an unexpected error (type=Not Found, status=404).
No message available

这是我的控制器

@Controller
@RequestMapping("/admin")
public class CourseScheduleController {

@Autowired
private CourseScheduleService courseScheduleService; 

@RequestMapping("/createCourse")
public ModelAndView getAllativities() {
    Map<String, Object> model = new HashMap<String, Object>();
    model.put("courseName", "");
    model.put("semister", "");
    model.put("startDate",null);
    model.put("endDate",null);
    return new ModelAndView("createCourse",model);
}

@RequestMapping("/saveCourse")
public String saveCourseSchedule(@ModelAttribute CourseBE courseBE){
    courseScheduleService.saveCourseSchedule(courseBE);
    return "redirect:/admin/createCourse";
}

请帮我解决这个问题。

3 个答案:

答案 0 :(得分:0)

也许你应该在控制器上包含一个活页夹:

@InitBinder
    public void initBinder(WebDataBinder dataBinder) {
        dataBinder.setDisallowedFields("id");

        dataBinder.registerCustomEditor(Date.class, new PropertyEditorSupport() {
            @Override
            public void setAsText(String value) {
                try {
                    setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
                } catch (ParseException e) {
                    setValue(null);
                }
            }
        });

    }

答案 1 :(得分:0)

在控制器中添加活页夹将允许从表单到模型的绑定。

 @InitBinder
 public void initDateBinder(final WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-mm-dd"), true));
 }

应该知道并在日期转换表单中的输入字符串。

如果您使用input type="date"我认为您在pattern date中别无选择。 如果您希望模式具有更大的灵活性,只需将输入类型更改为文本类型,并将格式的模式调整为您喜欢的模式。

你应该在你的html标记中使用th:field来绑定到mork,如:

<input th:field="*{startDate}"

并确保您的表单具有类似<form th:object="${courseBE}"的内容,以定义用于绑定表单的bean用法。

答案 2 :(得分:0)

添加以下内容:

logging.level.org.springframework.web=DEBUG

到属性文件。它将有助于详细记录HTTP错误。