我有一个表单,我用来通过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 =空]
答案 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属性。