Jak przesłać LocalDateTime z JSP do kontrolera?

0

Załóżmy, że mam formę, której część kodu widać poniżej:

  <form:form modelAttribute="personalTask" method="POST" action="${pageContext.request.contextPath}/taskmgr/add">
    (...)
            <div class="input-group">
                    <form:input path="startDate" type="date" id="startDateTimePicker" name="search_message[displayDateFrom]" placeholder="YYYY-MM-DD hh:mm:ss" class="input-sm form-control"></form:input>
                    <div class="input-group-addon">
                            <span class="glyphicon glyphicon-calendar"> </span>
                    </div>
            </div>  
    (...)
    </form:form>

oraz metodę w kontrolerze:


    @RequestMapping(value = "/add", method = RequestMethod.POST)
    public String addProfileTask(@ModelAttribute("personalTask")PersonalTask task, Principal principal){

            return "taskManager";
    }

Klasa Typu Personal task ma w środku LocalDateTime:

 public class PersonalTask{
    (...)
            @Column(name = "START_DATE", columnDefinition="TIMESTAMP", nullable = false)
            private LocalDateTime startDate;
    (...)
            public LocalDateTime getStartDate() {
                    return startDate;
            }
            public void setStartDate(LocalDateTime startDate) {
                    this.startDate = startDate;
            }
    (...)
    }

Da się jakoś przesłać w tej sytuacji datetime w taki sposób żeby zbindowało ją do @ModelAttribute("personalTask")PersonalTask task. Czego użyć? Zaznaczę, że bindowanie działa poprawnie przy zwykłych stringach, etc. Problem następuje wtedy gdy uzupełniam datę w formie i chcę ją wysłać

0

Użyj formattera i sformatuj to co dostajesz z formularza na LocalDateTime.

0

Chcę zbindować cały obiekt PersonalTask a nie tylko LocalDateTime

0

Chodzi mi o coś takiego :

@Component
public class DateFormatter implements Formatter<Date> {

    public DateFormatter() {
        super();
    }

    @Override
    public Date parse(final String text, final Locale locale) throws ParseException {
        return createDateFormat(locale).parse(text);
    }

    @Override
    public String print(final Date object, final Locale locale) {
        return createDateFormat(locale).format(object);
    }

    private SimpleDateFormat createDateFormat(final Locale locale) {
        final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
        dateFormat.setLenient(false);
        return dateFormat;
    }
}

Przy bindowaniu Spring uruchomi formattera i przekonwertuje zgodnie z Twoją implementacją to co chcesz na co chcesz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1