2016-11-06 5 views
0

Ich habe einen Controller, in dem ich sowohl die Get-und Post-Methoden. Beide Methoden funktionieren gut, aber wenn ich @ModelAttribute Annotation für die POST-Methode einführe, beginnt es, mir den Status 400 zu geben - Die vom Client gesendete Anfrage war syntaktisch falsch.Spring @ModelAttribute funktioniert nicht

Ich weiß nicht, was ich falsch mache. Die Ansicht wie folgt aussieht:

<form:form method="post" action="createIdeaPublic" commandName="idea"> 
    <table class="form"> 
     <tr> 
      <td align="right"><label for="title">Idea Title</label></td><td align="left"><form:input type="text" path="title" id="title"></form:input></td> 
      <td align="right"><label for="email">Your Email</label></td><td align="left"><form:input type="text" path="requestorEmail" id="requestorEmail" class="emails"></form:input></td> 
     </tr> 


     <tr> 
      <td align="right"><label for="partnerEmail">CI Contact Email</label></td><td align="left"><form:input type="text" path="cIInitialContact" id="cIInitialContact" class="emails"></form:input></td> 
      <td align="right"><label for="sponsorEmail">Sponsor Email</label></td><td align="left"><form:input type="text" path="sponsorEmail" id="sponsorEmail" class="emails"></form:input></td> 

     </tr> 


     <tr> 
      <td align="right"><label for="requestedDeliveryDate">Requested Delivery Date</label></td><td align="left"><form:input type="text" path="requestedDeliveryDate" id="requestedDeliveryDate" class="datepicker"></form:input></td> 
      <td align="right"><label>Classification</label></td><td align="left"> 

       <label for="discretionary" class="radio">Discretionary</label> 
       <form:radiobutton path="stateDescription" id="discretionary" value="Discretionary"></form:radiobutton> 
       <label for="mandatory" class="radio">Mandatory</label> 
       <form:radiobutton path="stateDescription" id="mandatory" value="Mandatory"></form:radiobutton> 
       <label for="regulatory" class="radio">Regulatory</label> 
       <form:radiobutton path="stateDescription" id="regulatory" value="Regulatory"></form:radiobutton> 
      </td> 
     </tr> 

     <tr> 
      <td colspan="4" align="right"><input type="submit" class="ui ui-button ui-corner-all ui-widget" style="margin-top: .6em; margin-right: 1em;font-weight: bold;font-size: 1.2em; width: 150px;" value="Create Idea" /></td> 
     </tr> 
    </table> 
</form:form> 

Ich habe versucht, die Command = „Idee“ zu modelAttribute = „Idee“, aber keine benifit ändern.

The Spring Controller sieht aus wie

@Controller 
@RequestMapping ("/createIdeaPublic") 
public class CreateIdeaPublicController{ 


    @RequestMapping(method = RequestMethod.GET) 
    public ModelAndView view(ModelMap model) { 
     model.addAttribute("areas",Utils.areas); 
     return new ModelAndView("createIdeaPublic", "idea", new Idea()); 
    } 


    @RequestMapping(method = RequestMethod.POST) 
    public String submit(@ModelAttribute("idea")Idea idea, ModelMap model) { 

//  System.out.println(idea.getTitle()); 
     System.out.println("Hello World"); 
     return "redirect:createIdeaPublic"; 
    } 

} 

Aber sobald ich die @ModelAttribute ("Idee") Idee Idee entfernen, aus dem Verfahren vorlegen, die Formulareinreichung zu arbeiten beginnt.

+0

Können Sie die Ausnahme stacktrace vom Server hinzufügen? – developer

+0

Es gibt auch keine Ausnahmen. –

Antwort

0

Ich fand es heraus. Es war ein Problem mit dem Datumsfeld. Wenn ich keinen Wert in das Datumsfeld gebe, würde ich 400 Seiten bekommen. Also hier ist, was ich in der Controller-Klasse gemacht habe. Kopieren Sie, wie es ist, wenn Sie dieses Problem haben (Ändern Sie einfach das Datumsformat entsprechend).

@InitBinder 
    public void initBinder(WebDataBinder binder) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); 
     dateFormat.setLenient(false); 

     // true passed to CustomDateEditor constructor means convert empty String to null 
     binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); 
    } 
Verwandte Themen