@ModelAttribute Spring MVC的portlet和Ajax表单提交

问题描述 投票:1回答:2

对不起,我的英文不好。我有很多事情在我的脑海这是字面上的困惑我怎么回事。我要处理的表单提交值@ModelAttribute这是困惑我摆在首位。如果不使用@ModelAttribute我好,并拥有一切完美的工作。

我的要求是处理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();
                   }
      } 
   })

});

我有以下的控制器来处理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.
       }

}

我创建了一个用户类,我想用@ModelAttribute来设置/获取值。我已经经过许多环节,试图找出使用它了。其中一个例子了使用表单标签库。我有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>

谢谢您的帮助!

spring jquery spring-mvc websphere-portal spring-portlet-mvc
2个回答
0
投票

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

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

难道我用这个词“属性”,足以在这个答案了吗?

你可能会想填充命令或FormBackingObject的形式也将是用户的一个实例。在这种情况下,你可以在地方的ModelAttribute的使用的CommandName属性,它都将形式映射出用户的人口,并映射用户到控制器上的@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.
       }
© www.soinside.com 2019 - 2024. All rights reserved.