Форма не публикует значения, работает «редактирование и повторная отправка браузера»

Я использую Spring MVC Web для отправки формы. Форма отображается нормально, однако, когда я отправляю эту форму, я получаю код состояния http 400, однако, если я использую функцию «редактировать и повторно отправить» firefox, она использует соответствующий метод контроллера (чего не происходит, когда я отправляю эту форму из html). Но опять же есть еще одна проблема: в этом методе контроллера, когда я проверяю свой объект modelAttribute, я нахожу все в этом объекте нулевым. Это не так, поскольку я отправляю значения в этой форме.

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
    <%@ include file="include.jsp"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>${message}</title>
    </head>
    <body>
        General:
<br>
<form:form modelAttribute="initialMatchConfiguration" action="../match/configure" method="post" >
    Date and time:
    <form:input path="dateAndTimeOfMatch" type="text" />
    <br> Match Type:
    <form:select path="matchType">
        <option value="friendly">friendly</option>
        <option value="international">international</option>
        <option value="domestic">domestic</option>
        <option value="local">local tournament</option>
    </form:select>
    <br> Match Rules Configuration:
    <form:select path="matchConfigurationId">
        <option value="0">Random</option>
        <option value="1">T20</option>
        <option value="2">One Day</option>
        <option value="3">Test</option>
    </form:select>
    <button type="button">Create a new rule configuration</button>
    <br> Tournament:
    <form:input type="text" path="tournament" />
    <form:hidden path="tournamentId"/>
    <button type="button">Create a new Tournament</button>
    <br> Played at Stadium:
    <form:input type="text" path="stadium" />
    <form:hidden path="stadiumId"/>
    <button type="button">Create a new stadium</button>
    <br> <input type="submit" value="Save" />
</form:form>
    </body>
    </html>

Следующий метод заключается в отображении формы:

    @RequestMapping(value = "/match/create", method = RequestMethod.GET)
public String  createMatch(Model model){
    model.addAttribute("initialMatchConfiguration", new InitialMatchConfiguration());
    return "config-match-initial";
}

Следующий метод - отправить форму:

@RequestMapping(value = "/match/configure", method = RequestMethod.POST)
public String  configureMatch(@ModelAttribute("initialMatchConfiguration") InitialMatchConfiguration initialMatchConfig, Model model){
    System.out.println(initialMatchConfig);
    return "config-match-team";
} 

Класс InitialMatchConfiguration

public class InitialMatchConfiguration {
private Date dateAndTimeOfMatch;
private String matchType;
private Long matchConfigurationId;
private Long tournamentId;
private Long stadiumId;
private String tournament;
private String stadium;
public Date getDateAndTimeOfMatch() {
    return dateAndTimeOfMatch;
}
public void setDateAndTimeOfMatch(Date dateAndTimeOfMatch) {
    this.dateAndTimeOfMatch = dateAndTimeOfMatch;
}
public String getMatchType() {
    return matchType;
}
public void setMatchType(String matchType) {
    this.matchType = matchType;
}
public Long getMatchConfigurationId() {
    return matchConfigurationId;
}
public void setMatchConfigurationId(Long matchConfigurationId) {
    this.matchConfigurationId = matchConfigurationId;
}
public Long getTournamentId() {
    return tournamentId;
}
public void setTournamentId(Long tournamentId) {
    this.tournamentId = tournamentId;
}
public Long getStadiumId() {
    return stadiumId;
}
public void setStadiumId(Long stadiumId) {
    this.stadiumId = stadiumId;
}
public String getTournament() {
    return tournament;
}
public void setTournament(String tournament) {
    this.tournament = tournament;
}
public String getStadium() {
    return stadium;
}
public void setStadium(String stadium) {
    this.stadium = stadium;
}

}

Запрос при запуске из инструмента редактирования и повторной отправки Firefox:

Заголовок запроса:

POST http://localhost:8090/scoreboard.web/score/match/configure

Host: localhost:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101    Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8090/scoreboard.web/score/match/create
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

Тело запроса:

Content-Type: application/x-www-form-urlencoded
Content-Length: 107

dateAndTimeOfMatch=&matchType=friendly&matchConfigurationId=0&tournament=&tournamentId=&stadium=&stadiumId=

person Prashant Bhardwaj    schedule 07.01.2017    source источник
comment
поделитесь телом запроса, отправленным как часть запроса, чтобы прокомментировать дальше   -  person Barath    schedule 08.01.2017
comment
Обновил вопрос с запросом/ответом.   -  person Prashant Bhardwaj    schedule 08.01.2017
comment
проверьте это ‹form:input path=dateAndTimeOfMatch type=text /› --› это Date измените тип на type=date   -  person Barath    schedule 08.01.2017
comment
обновил ответ. Было полезно??   -  person Barath    schedule 08.01.2017


Ответы (1)


КОРНЯЯ ПРИЧИНА: изменение типа dateAndTimeOfMatch с текстового на дату

<сильный>

и в классе ФОРМА:

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
    private Date dateAndTimeOfMatch;

Форма :

 <form:form modelAttribute="initialMatchConfiguration" action="../match/configure" method="post" >
Date and time:
<form:input path="dateAndTimeOfMatch" type="date" />
<br> Match Type:
<form:select path="matchType">
    <option value="friendly">friendly</option>
    <option value="international">international</option>
    <option value="domestic">domestic</option>
    <option value="local">local tournament</option>
</form:select>
<br> Match Rules Configuration:
<form:select path="matchConfigurationId">
    <option value="0">Random</option>
    <option value="1">T20</option>
    <option value="2">One Day</option>
    <option value="3">Test</option>
</form:select>
<button type="button">Create a new rule configuration</button>
<br> Tournament:
<form:input type="text" path="tournament" />
<form:hidden path="tournamentId"/>
<button type="button">Create a new Tournament</button>
<br> Played at Stadium:
<form:input type="text" path="stadium" />
<form:hidden path="stadiumId"/>
<button type="button">Create a new stadium</button>
<br> <input type="submit" value="Save" />

InitialMatchConfiguration.java:

 public class InitialMatchConfiguration {

@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private Date dateAndTimeOfMatch;
private String matchType;
private Long matchConfigurationId;  
private Long tournamentId;
private Long stadiumId;
private String tournament;
private String stadium;

 //getters and setters

}

Контроллер:

@RequestMapping(value = "/match/configure", method = RequestMethod.POST)
    public String  configureMatch(@ModelAttribute("initialMatchConfiguration") InitialMatchConfiguration initialMatchConfig, Model model){
        System.out.println(initialMatchConfig.toString());

        return "config-match-team";
    } 

Ответ:

** InitialMatchConfiguration [dateAndTimeOfMatch=Вт, 10 января, 05:30:00 IST 2017, matchType=international, matchConfigurationId=2, TourId=null, StadiumId=null, турнир=sa, Stadium=]**

person Barath    schedule 08.01.2017
comment
Вы видели разницу в вашем коде и моем коде? - person Prashant Bhardwaj; 08.01.2017
comment
пожалуйста, предоставьте свой код, который нельзя комментировать. поделитесь InitialMatchConfiguration.java и формой - person Barath; 08.01.2017
comment
Необходимые вещи добавлены в вопрос. - person Prashant Bhardwaj; 08.01.2017
comment
Спасибо Барат!! Но почему он не выдал ни одного исключения из-за несоответствия? - person Prashant Bhardwaj; 08.01.2017