1

对不起,我英文很差。我脑海中有许多事情在困扰着我。我想处理表单提交的值为@ModelAttribute,这首先让我感到困惑。 不使用@ModelAttribute我很好,并且一切都很完美。@ModelAttribute spring mvc portlets和ajax表单提交

我的要求是处理Ajax形式的portlet和Spring MVC提交3.0批注

表我有

<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>&nbsp; </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(); 
        } 
     } 
    }) 

}); 

我有以下控制器来处理阿贾克斯电话

@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

您能否详细说明一下:'我创建了一个用户模型类,并且我想将其作为@ ModelAttribute'来实现。 – 2012-08-15 20:00:07

+0

我很抱歉我的英语不好,我的意思是我有一个用户类,当我提交表单时,控制器应该使用@ModelAttribute设置/获取值而不是使用String fName = request.getParamater(“fname”); – user525146 2012-08-15 20:09:09

+0

我想你会发现这个有用的http://java.dzone.com/articles/using-spring-mvc%E2%80%99s,这个'公共用户populateUser()'特别是 – ant 2012-08-15 21:09:06

回答

0

为了获得@ModelAttribute的工作,我想你需要一个的ModelAttribute属性添加到您的表单标签到的ModelAttribute映射到用户:

<form:form modelAttribute="User" action="yourResourceUrl"> 

我有没有足够用了这个词“属性”这个答案呢?

您最终可能希望使用Command或FormBackingObject填充表单,该表单也是User的一个实例。在这种情况下,您可以使用commandName属性代替modelAttribute,并且它会将表单映射到User,以便将用户映射到控制器上的@ModelAttribute注释。

0

我想你可能会使用名为User.class 模型的类注释你的控制器类@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. 
     }