【问题标题】:@ModelAttribute from jquery ajax form is null来自 jquery ajax 表单的 @ModelAttribute 为 null
【发布时间】:2014-01-20 00:35:55
【问题描述】:

我有一个表单,用于通过 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, 站点名称=null]

【问题讨论】:

  • 用site.something代替something。
  • 我已经尝试过了,正如我的评论所说,我已经尝试了所有我能想到的变化。
  • 如果您设置了站点的模型属性以加载您的 ajax 表单,您可以分享您的控制器方法吗?
  • 你使用的是什么版本的 Spring MVC?你最后的 HTML sn-p 和控制器对我来说很好。

标签: java json spring spring-mvc


【解决方案1】:

使用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>

控制器

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

注意: 在重定向到 site.jsp 之前在模块中添加 mySite 对象

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

希望这能解决您的问题

【讨论】:

    【解决方案2】:

    使用@ModelAttribute 时,请确保在您的jsp 页面中使用“modelAttribute”属性。如下图 -

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

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

    【讨论】:

    • 只有在他们使用&lt;form:input&gt; 元素时才需要这样做。
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2012-12-07
    • 2011-04-07
    • 1970-01-01
    • 2020-06-27
    • 2011-01-31
    • 2012-08-12
    相关资源
    最近更新 更多