1

英語が下手でごめんなさい。私は文字通り私を混乱させている私の心の中で起こっている多くのことを持っています。フォームで送信された値を@ModelAttributeとして処理したいので、そもそも混乱します。@ModelAttributeを使用しなくても、私は優れており、すべてが完全に機能しています。

私の要件は、portletでのajaxフォーム送信とSpringMVC3.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.
       }

}

Userクラスを作成し、@ModelAttributeを使用して値を設定/取得したいと思います。私はそれを使用することを理解しようとして多くのリンクを通り抜けてきました。例の1つは、taglib形式を使用しています。フォームをajax呼び出しとして送信するjQueryがありますが、フォームをこのパターンに変更するとコードが破損するかどうかわかりません。

<%@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>

助けてくれてありがとう!

4

2 に答える 2

0

User.class という名前の Model クラスを使用している可能性があると思います コントローラ クラスに@SessionAttributes(types = User.class) Annotate your resource mapping method with @ModelAttribute("<model_attribute_name>")User user

そしてあなたの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.
       }
于 2013-05-31T06:11:12.980 に答える
0

@modelAttribute を機能させるには、フォームタグに modelAttribute 属性を追加して、ModelAttribute をユーザーにマップする必要があると思います。

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

この回答で「属性」という言葉を十分に使用しましたか?

User のインスタンスでもある Command または FormBackingObject をフォームに入力したくなる場合があります。この場合、modelAttribute の代わりに commandName 属性を使用できます。これにより、フォームがユーザーにマップされて入力され、ユーザーがコントローラーの @ModelAttribute アノテーションにマップされます。

于 2013-04-29T16:26:46.753 に答える