来自jquery ajax表单的@ModelAttribute为null

时间:2014-01-20 00:35:55

标签: java json spring spring-mvc

我有一个表单,我用来通过ajax提交给一个没有正确填充@ModelAttribute的spring动作。我已尝试将输入作为siteName site.siteName以及其他各种内容。

对于我的表单,我正在执行$('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保存网站:网站[id = null,   SITENAME =空]

2 个答案:

答案 0 :(得分:0)

使用 Spring标记 HTML标记 结合使用,您只需更改JSP,如下所示

JSP文件

<%@ 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";

希望这能解决您的问题

答案 1 :(得分:-1)

使用@ModelAttribute时,请确保在jsp页面中使用'modelAttribute'属性。如下所示 -

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

这将确保在“站点”模型中填充siteName属性。