SpringMVCのさまざまなパラメーターバインディング方法
1.基本データ型(intを例として取る、他のものは似ています):
コントローラーコード:
@RequestMapping( "Sayth.do")public void test(int count){}フォームコード:
<form action = "sayth.do" method = "post"> <input name = "count" value = "10" type = "text" />........</ form>
フォームの入力の名前値がコントローラーのパラメーター変数名と一致する場合、データバインディングを完了することができます。一貫性がない場合は、@RequestParam Annotationを使用できます。基本データ型がコントローラーメソッドパラメーターで定義されているが、ページから送信されたデータがnullまたは ""である場合、データ変換の例外が発生することに注意してください。つまり、フォームで渡されたデータがnullまたは ""にできないことを確認する必要があるため、開発プロセス中に、パラメーターデータ型を空のデータのパッケージングタイプとして定義することをお勧めします。次の例を参照してください。
2。パッケージングタイプ(整数を例として使用する、他のものは似ています):
コントローラーコード:
@RequestMapping( "Sayth.do")public void test(integer count){}フォームコード:
<form action = "sayth.do" method = "post"> <input name = "count" value = "10" type = "text" />........</ form>
基本的に基本データ型と同じです。違いは、フォームで渡されたデータがnullまたは ""になる可能性があることです。上記のコードは例です。フォームのnumが「」またはフォームにnum入力がない場合、コントローラーメソッドパラメーターのnum値はnullです。
3。カスタムオブジェクトタイプ:
モデルコード:
パブリッククラスユーザー{private string firstName;プライベート文字列lastName; public string getFirstName(){return firstName; } public void setFirstName(string firstName){this.firstname = firstName; } public string getLastName(){return lastName; } public void setLastName(string lastname){this.lastname = lastname; }}コントローラーコード:
@RequestMapping( "Sayth.do")public void test(user user){}フォームコード:
<form action = "sayth.do" method = "post"> <input name = "firstname" value = "zhang" type = "text"/> <input name = "lastname" value = "3" type = "text" />........ </ form>
非常にシンプルで、オブジェクトのプロパティ名と入力名を1つずつ一致させるだけです。
4.化合物オブジェクトタイプのカスタマイズ:
モデルコード:
public class contactInfo {private string tel;プライベート文字列アドレス。 public string gettel(){return tel; } public void settel(string tel){this.tel = tel; } public string getAddress(){return Address; } public void setAddress(stringアドレス){this.address = address; }} public class user {private string firstName;プライベート文字列lastName; private contactInfo contactInfo; public string getFirstName(){return firstName; } public void setFirstName(string firstName){this.firstname = firstName; } public string getLastName(){return lastName; } public void setLastName(string lastname){this.lastname = lastname; } public ContactInfo getContactInfo(){return contactInfo; } public void setContactInfo(contactInfo contactInfo){this.contactinfo = contactInfo; }}コントローラーコード:
@RequestMapping( "sayth.do")public void test(user user){system.out.println(user.getFirstname()); System.out.println(user.getLastName()); system.out.println(user.getContactinfo()。getTel()); system.out.println(user.getContactinfo()。getAddress();}フォームコード:
<form action = "sayth.do" method = "post"> <input name = "firstname" value = "zhang" /> <br> <input name = "lastname" value = "3" /> <br> <input name = "contactInfo.tel" value = "13809908909" />> <br> <入力= "contactinfo.addursirs" "beijing" beijne /> <br> <入力タイプ= "submit" value = "save" /> < /form>
ユーザーオブジェクトにはcontactInfo属性があります。コントローラーのコードは、ポイント3で言われている内容と一致しています。ただし、フォームコードでは、「属性名(オブジェクトタイプの属性).attribute name」を使用する必要があります。
5。リストバインディング:
リストはオブジェクトにバインドする必要があり、コントローラーメソッドのパラメーターに直接記述することはできません。
モデルコード:
パブリッククラスユーザー{private string firstName;プライベート文字列lastName; public string getFirstName(){return firstName; } public void setFirstName(string firstName){this.firstname = firstName; } public string getLastName(){return lastName; } public void setLastName(string lastname){this.lastname = lastname; }} public class userlistform {private list <user> users; public List <user> getUsers(){return users; } public void setusers(list <user> users){this.users = users; }}コントローラーコード:
@RequestMapping( "sayth.do")public void test(userlistform userform){for(user:userform.getusers()){system.out.println(user.getFirstname() + " - " + user.getLastName()); }}フォームコード:
<form action = "sayth.do" method = "post"> <table> <thead> <tr> <th>名</th> <th <thth </th> </tr </thead> <tfoot> <tr> <td colspan = "2" 2 "> <inputタイプ=" submit "" save "/> </td> </td> <td> name = "users [0] .firstname" value = "aaa"/> </td> <td> <input name = "users [0] .lastname" value = "bbb"/> </td> </tr <tr> <td> <input name = "users [1] .firstname" value = "ccc"/td> <td> < name = "users [1] .lastname" value = "ddd"/> </td> </tr> <td> <td> <input name = "users [2] .firstname" value = "eee"/> </td> <td> <input name = "users [2] .lastname" value = "fff"/td>>>>>
実際、これは4番目のポイントのユーザーオブジェクトのcontantInfoデータのバインディングに多少似ていますが、ここのユーザーリストフォームオブジェクトのプロパティは、通常のカスタムオブジェクトではなくリストとして定義されます。したがって、フォームでリストの添え字を指定する必要があります。 Springがサイズとして最大サブスクリプト値を持つリストオブジェクトを作成することに言及する価値があります。したがって、形式の行の動的な追加と削除がある場合、特別な注意を払う必要があります。たとえば、テーブルを使用した後、ユーザーが行を削除し、使用中に複数回行を追加した後、サブスクリプト値は実際のサイズと矛盾します。現時点では、リスト内のオブジェクトのみがサブスクリプトを持つ形式の値を持ちます。それ以外の場合はnullになります。例を参照してください:
フォームコード:
<form action = "sayth.do" method = "post"> <table> <thead> <tr> <th>名</th> <th <thth </th> </tr </thead> <tfoot> <tr> <td colspan = "2" 2 "> <inputタイプ=" submit "" save "/> </td> </td> <td> name = "users [0] .firstname" value = "aaa"/> </td> <td> <input name = "users [0] .lastname" value = "bbb"/> </td> </tr <tr> <td> <input name = "users [1] .firstname" value = "ccc"/td> <td> < name = "users [1] .lastname" value = "ddd"/> </td> </tr> <td> <td> <input name = "users [20] .firstname" value = "eee"/> </td> <td> <input name = "users [20] .lastname" value = "fff"/td>>>>
この時点で、コントローラー内のuserform.getusers()はリストのサイズを21にし、これらの21のユーザーオブジェクトはnullではありませんが、2〜19のユーザーオブジェクトの最初の名前とラスト名はnullです。印刷結果:
AAA -BBBCCC -DDDNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL -NULLNULL- nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullnull -nullee -fff
6.バインディングの設定:
セットはリストに似ており、オブジェクトにもバインドする必要があり、コントローラーメソッドのパラメーターに直接記述することはできません。ただし、Binding SETデータの場合、対応するモデルオブジェクトの数を最初に設定オブジェクトに追加する必要があります。
モデルコード:
パブリッククラスユーザー{private string firstName;プライベート文字列lastName; public string getFirstName(){return firstName; } public void setFirstName(string firstName){this.firstname = firstName; } public string getLastName(){return lastName; } public void setLastName(string lastname){this.lastname = lastname; }} public class usersetform {private set <user> users = new Hashset <user>(); public usersetform(){users.add(new user()); users.add(new user()); users.add(new user()); } public set <user> getUsers(){return users; } public void setusers(set <user> users){this.users = users; }}コントローラーコード:
@RequestMapping( "sayth.do")public void test(usersetform userform){for(user user:userform.getusers()){system.out.println(user.getFirstname() + " - " + user.getLastName()); }}フォームコード:
<form action = "sayth.do" method = "post"> <table> <thead> <tr> <th>名</th> <th <thth </th> </tr </thead> <tfoot> <tr> <td colspan = "2" 2 "> <inputタイプ=" submit "" save "/> </td> </td> <td> name = "users [0] .firstname" value = "aaa"/> </td> <td> <input name = "users [0] .lastname" value = "bbb"/> </td> </tr <tr> <td> <input name = "users [1] .firstname" value = "ccc"/td> <td> < name = "users [1] .lastname" value = "ddd"/> </td> </tr> <td> <td> <input name = "users [2] .firstname" value = "eee"/> </td> <td> <input name = "users [2] .lastname" value = "fff"/td>>>>
基本的にリストバインディングに似ています。
最大サブスクリプト値がセットのサイズよりも大きい場合、org.springframework.beans.invalidpropertyexceptionがスローされることに注意してください。したがって、使用すると少し不便です。
7。マップバインディング:
マップは最も柔軟です。また、オブジェクトにバインドする必要があり、コントローラーメソッドのパラメーターに直接記述することはできません。
モデルコード:
パブリッククラスユーザー{private string firstName;プライベート文字列lastName; public string getFirstName(){return firstName; } public void setFirstName(string firstName){this.firstname = firstName; } public string getLastName(){return lastName; } public void setLastName(string lastname){this.lastname = lastname; }} public class usermapform {private map <string、user> users; public Map <string、user> getusers(){return users; } public void setusers(map <string、user> users){this.users = users; }}コントローラーコード:
@RequestMapping( "sayth.do")public void test(usermapform userform){for(map.entry <string、user> entry:userform.getusers()。entryset()){system.out.println(entry.getKey() + ":" + entry.getValue()。 }}フォームコード:
<form action = "sayth.do" method = "post"> <table> <thead> <tr> <th>名</th> <th <thth </th> </tr </thead> <tfoot> <tr> <td colspan = "2" 2 "> <inputタイプ=" submit "" save "/> </td> </td> <td> name = "users ['x']。firstName" value = "aaa"/> </td> <td> <input name = "users ['x']。lastName" value = "bbb"/> </td> </tr <tr> <td> <input name = "users ['y'] name = "users ['y']。lastname" value = "ddd"/> </td> </tr> <td> <td> <input name = "users ['z']。firstName" value = "eee"/> </td> <td> <input name = "users ['z']。ラスト名" ffff "ffff" "ffff" "ffff" /> </td> </tr> </tbody> </table> </form>
印刷結果:
X:aaa -bbby:ccc -dddz:eee -fff
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。