2014-01-20 4 views
0

У меня есть форма, которую я использую для отправки через ajax в действие весны, которое неправильно заполняет @ModelAttribute. Я пробовал входы как siteName site.siteName и другие различные вещи.@ModelAttribute from jquery ajax form is null

Для моей формы я делаю $ ('form'). AjaxForm(), а затем он отправляется через AJAX, когда я нажимаю кнопку отправки.

Я вижу данные, передаваемые через firebug, но Spring ничего не делает с этим. Любые идеи, почему это всегда пусто?

Мой класс Сайт:

public class Site implements Serializable { 
    private static final long serialVersionUID = 1L; 

    private Long id; 

    private String siteName; 

    public Site() { 
    } 

    public Long getId() { 
     // noop 
     return this.id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    public String getSiteName() { 
     return this.siteName; 
    } 

    public void setSiteName(String siteName) { 
     this.siteName = siteName; 
    } 

} 

Мой HTML (загружается из AJAX)

<form method='post' action='/web/admin/sites/new'> 
    <fieldset> 
     <legend>New Site</legend> 
     <label for='site.siteName'>Site Name</label> <input type='text' id='site.siteName' name='site.siteName'/> 
      <input type='hidden' name='site.id' value=''/> 
      <input type='submit'value='Save' /> 
    </fieldset> 
</form> 

Мой альтернативный HTML (загружается через AJAX)

<form method='post' action='/web/admin/sites/new'> 
    <fieldset> 
     <legend>New Site</legend> 
     <label for='siteName'>Site Name</label> <input type='text' id='siteName' name='siteName'/> 
      <input type='hidden' name='id' value=''/> 
      <input type='submit'value='Save' /> 
    </fieldset> 
</form> 

Наконец, мой метод контроллера:

@RequestMapping(value="/new", method=RequestMethod.POST) 
public String saveSite(@ModelAttribute Site site, Model m) 
{ 
    /*Site s = new Site();*/ 
    log.debug("Saving site from POST: {}", site.toString()); 
    m.addAttribute("site", site); 
    return "/admin/sites/new_site"; 
} 

И, наконец, выход из журнала высказывания:

... SitesController - Сохранение сайт из POST: Site [ID = нуль, SiteName = нуль]

+0

Вместо 'сайт .something', просто используйте 'something'. –

+0

Я уже пробовал это, так как в моем комментарии говорится, что я пробовал все варианты, о которых я могу думать. – mikeb

+0

может уделить вам ур контроллер метод wer U установили атрибут модели для сайта для загрузки ur ajax формы? – Arvind

ответ

-1

При использовании @ModelAttribute, убедитесь, что вы используете атрибут 'modelAttribute' на странице jsp. Ниже показано -

<form:form method="post" modelAttribute="site" action="/web/admin/sites/new"> 
    <form:input path="siteName" /> 
</form:form> 

Это позволит убедиться, что свойство siteName заполнено моделью «Сайт».

+0

Это необходимо, только если они использовали элемент ''. –

0

Используйте пружинные теги сочетаются с HTML теги вам просто нужно изменить JSP следующим образом

JSP FILE

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
</head> 
<body> 
<form:form method="POST" action='/web/admin/sites/new' commandName="mySite"> 
    <fieldset> 
     <legend>New Site</legend> 
     <label for='site.siteName'>Site Name</label> 
      <form:input path='siteName'/> 
      <form:hidden path='id' /> 
      <form:input type='submit'value='Save' /> 
    </fieldset> 
</form:form> 

CONTROLLER

@RequestMapping(value="/new", method=RequestMethod.POST) 
public String saveSite(@ModelAttribute("mySite") Site site, Model m) { 
    log.debug("Saving site from POST: {}", site.toString()); 
    m.addAttribute("site", site); 
    return "/admin/sites/new_site"; 
} 

Примечание:добавить объект MySITE в модуле перед перенаправлением на site.jsp в

Site site = new Site(); 
model.addAttribute("mySite", site); 
//here we send request to site.jsp page. 
return "site"; 

надеюсь, что это будет решить вашу проблему