html5 форма отправьте дату отправки с шаблоном yyyy-MM-dd - PullRequest
0 голосов
/ 16 ноября 2018

form отправить отправку date с паттеном yyyy-MM-dd для поддержки при отправке. но есть ли способ отправить дату в dd-MM-yyyy. Я использую html5

это работает правильно, если изменить type="text", чем type="date"

Я пытаюсь отправить дату dd-MM-yyyy, интерфейс выглядит как показано ниже.

enter image description here

При отправке, поскольку значение, отправляемое на сервер, равно yyyy-MM-dd и из-за чего возникает следующая ошибка. Что-то не так с моим кодом?

2018-11-16 18: 12: 20.553 WARN 8925 --- [nio-8080-exec-2] .w.s.m.s.DefaultHandlerExceptionResolver: не удалось связать запрос элемент: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Не удалось преобразовать значение типа 'java.lang.String' в требуемый тип 'Java.time.LocalDate'; вложенное исключение org.springframework.core.convert.ConversionFailedException: не удалось преобразовать из типа [java.lang.String] в тип [@ Org.springframework.web.bind.annotation.RequestParam @ org.springframework.format.annotation.DateTimeFormat java.time.LocalDate] для значения '2018-11-09'; вложенное исключение java.lang.IllegalArgumentException: попытка разбора для значения [2018-11-09]

Ниже приведен код:

JSP:

<!DOCTYPE html>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html lang="en">
<head>

<link rel="stylesheet" type="text/css"
    href="webjars/bootstrap/3.3.7/css/bootstrap.min.css" />

<!-- 
    <spring:url value="/css/main.css" var="springCss" />
    <link href="${springCss}" rel="stylesheet" />
     -->
<c:url value="/css/main.css" var="jstlCss" />
<link href="${jstlCss}" rel="stylesheet" />

</head>
<body>

    <nav class="navbar navbar-inverse">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">Spring Boot</a>
            </div>
            <div id="navbar" class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Home</a></li>
                    <li><a href="#about">About</a></li>
                </ul>
            </div>
        </div>
    </nav>

    <div class="container">

        <div class="starter-template">
            <h1>Spring Boot Web JSP Example</h1>
            <h2>Message: ${message}</h2>
            <form action="/get" method="post"> 
            <input type="date" name="date" pattern="\d{1,2}/\d{1,2}/\d{4}"><!--   -->
            <input type="submit" value="submit">
            </form>
        </div>

    </div>
    <!-- /.container -->

    <script type="text/javascript"
        src="webjars/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</body>

</html>

Класс контроллера:

@Controller
public class MyController {

    // inject via application.properties
    @Value("${welcome.message:test}")
    private String message = "Hello World";

    @RequestMapping("/")
    public String welcome(Map<String, Object> model) {
        model.put("message", this.message);
        return "welcome";
    }

    @RequestMapping(value="/get",method={RequestMethod.GET,RequestMethod.POST})
    public String get(Map<String, Object> model, @RequestParam(value="date") @DateTimeFormat(pattern ="dd-MM-yyyy") LocalDate date) {
        System.out.println("get" + date.format(DateTimeFormatter.ofPattern("dd-MM-yyyy")));
        return "welcome";
    }

    //this is for testing
    @RequestMapping(value="/get1",method={RequestMethod.GET,RequestMethod.POST})
    public String get1(Map<String, Object> model, @RequestParam(value="date") String date) {
        System.out.println("get1 "+ date);
        return "welcome";
    }

}

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Напишите служебную функцию для ее обработки.

Например, вызовите formatAndReturnDate("30/12/2018","dd/MM/yyyy","yyyy-MM-dd");

public String formatAndReturnDate (String dateValue, String initDateFormat, String endDateFormat) throws ParseException {

    Date dateObj = new SimpleDateFormat(initDateFormat).parse(dateValue);
    SimpleDateFormat formatter = new SimpleDateFormat(endDateFormat);
    String parsedDate = formatter.format(dateObj);

    return parsedDate;
}
0 голосов
/ 16 ноября 2018

value для date ввода - это всегда в yyyy-MM-dd формате браузерах, которые его поддерживают ), независимо от того, как он отображается для пользователя.

Ваш лучший вариант - обновить бэкэнд, чтобы понимать этот относительно недвусмысленный формат, а не более неоднозначные форматы с первым месяцем или днем ​​(dd/MM/yyyy, как используется вбольшая часть Европы, или MM/dd/yyyy, используемая в большинстве стран Северной Америки).Я полагаю, что это означало бы это изменение в вашем классе контроллера (но Spring MVC не мой бейлик):

@RequestMapping(value="/get",method={RequestMethod.GET,RequestMethod.POST})
public String get(Map<String, Object> model, @RequestParam(value="date") @DateTimeFormat(pattern ="dd-MM-yyyy") LocalDate date) {
    System.out.println("get" + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
    return "welcome";
}

Вы можете предварительно обработать данные на стороне клиента, чтобы изменить формат, но яне рекомендую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...