抱歉我的英语不好。我脑子里有很多事情让我感到困惑。我想将表单提交的值作为@ModelAttribute来处理,这首先使我感到困惑。 不使用@ModelAttribute,我很好,并且一切都运行得很好。
我的要求是在portlet中处理ajax表单提交和spring mvc 3.0 annotations
我有表格
<portlet:resourceURL var="userURL" id="addUser" escapeXml="false" />
<form id="<portlet:namespace />User>
<table>
<tr><td>First Name: </td>
<td><input type="text" name="fname"></td></tr>
<tr><td>Last Name: </td>
<td><input type="text" name="lname"></td></tr>
<tr><td>Address 1: </td>
<td><input type="text" name="address_1"></td></tr>
<tr><td>Address 2: </td>
<td><input type="text" name="address_2"></td></tr>
<tr><td>Zipcode </td>
<td><input type="text" name="zipcode"></td></tr>
<tr><td> </td>
<td><button id="submit">Submit</td></tr>
</table>
</form>
我使用以下jQuery将表单作为ajax调用提交
$('#submit').on('click',function() {
var fname = $('#fname').val();
var lname = $('#lname').val();
var address_1 = $('#address_1').val();
var address_2 = $('#address_2').val();
var zipcode = $('#zipcode').val();
$.ajax({
type: "POST"
url: "<c:out value="${userURL}" />"
data: {fname: fname, lname: lname, address_1: address_1, address_2: address_2, zipcode: zipcode }
success: function(data) {
if(data == "success") {
$('#showError').hide();
} else {
$('#showError').show();
}
}
})
});
我有以下控制器来处理ajax调用
@Controller
@RequestMapping("VIEW")
public class UserController {
@ResourceMapping("addUser")
public String addUser(ResourceRequest request, ResourceResponse response) {
String fName = request.getParameter("fname");
String lName = request.getParameter("lname");
String address_1 = request.getParameter("address_1");
String address_2 = request.getParameter("address_2");
String zipcode = request.getParameter("zipcode");
// I do the processing of the form and add the user attributes to the database.
}
}
我创建了一个User类,我想使用@ModelAttribute来设置/获取值。我已经通过许多链接试图找出使用它。其中一个示例使用表单taglib。我有jQuery将表单作为ajax调用提交,我不确定是否将表单更改为此模式会破坏我的代码。
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<form:form method="post" action="addContact.html">
<table>
<tr>
<td><form:label path="firstname">First Name</form:label></td>
<td><form:input path="firstname" /></td>
</tr>
<tr>
<td><form:label path="lastname">Last Name</form:label></td>
<td><form:input path="lastname" /></td>
</tr>
<tr>
<td><form:label path="lastname">Email</form:label></td>
<td><form:input path="email" /></td>
</tr>
<tr>
<td><form:label path="lastname">Telephone</form:label></td>
<td><form:input path="telephone" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Add Contact"/>
</td>
</tr>
</table>
</form:form>
感谢您的帮助!
答案 0 :(得分:0)
为了让@modelAttribute正常工作,我认为你需要在form标签中添加一个modelAttribute属性,以便将ModelAttribute映射到用户:
<form:form modelAttribute="User" action="yourResourceUrl">
我在这个答案中是否充分使用了“属性”一词?
您最终可能希望使用Command或FormBackingObject填充表单,而Command或FormBackingObject也可以是User的实例。在这种情况下,您可以使用commandName属性代替modelAttribute,它将表单映射到User for population,并将User映射到控制器上的@ModelAttribute注释。
答案 1 :(得分:0)
我假设您可能正在使用名为User.class的Model类
使用@SessionAttributes(types = User.class)
注释您的控制器类
使用@ModelAttribute("<model_attribute_name>")
用户用户
在你的JSP中,
<form:form method="post" commandName="<model_attribute_name>" action="addContact.html">
<table>
<tr>
<td><form:label >First Name</form:label></td>
<td><form:input path="firstName" /></td>
</tr>
....
在资源映射方法中,您可以使用以下代码
访问表单数据 @ResourceMapping("addUser")
public String addUser(ModeAttribute("<model_attribute_name>") User user ,ResourceRequest request, ResourceResponse response) {
String fName = user.getFirstName();
...
// I do the processing of the form and add the user attributes to the database.
}