2017-08-09 1 views
1

入力フィールドからすべてのテキストフィールドとラジオボタンをArrayListとして送信してコントローラーに解析したいが、実際の方法は分からない。入力フィールドを@RequestMapping経由でコントローラーへの配列リストとして解析する

本当にありがとうございます。ここで

は、私がこれまで試したものです:

@RequestMapping(value = "/formdata", method = RequestMethod.POST) 
    public String formdata(HttpServletRequest req, @AuthenticationPrincipal User currentUser, @ModelAttribute RegDatas regDatas, Model model) { 
//get values as regDatas[0]? 
} 

は、ここに私のHTMLフォームです:

<form method="post" th:action="@{/formdata}" th:object="${regDatas}"> 
    <div class="col-sm-4"> 
     <input th:field="*{regDatas[0].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span> 
     <input th:field="*{regDatas[0].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span> 
     <p>Firstname:</p><input required="required" type="text" th:field="*{regDatas[0].firstname}" placeholder="Max" disabled="disabled" /> 
    </div> 
    <div class="col-sm-4"> 
     <input th:field="*{regDatas[1].gender}" type="radio" value="MALE" name="gender" disabled="disabled" /><span>Mr</span> 
     <input th:field="*{regDatas[1].gender}" type="radio" value="FEMALE" name="gender" disabled="disabled"/><span>Frau</span> 
     <p>Firstname:</p><input required="required" type="text" th:field="*{regDatas[1].firstname}" placeholder="Max" disabled="disabled" /> 

         <button type="submit">Speichern</button> 

    </div> 

</form> 

私のラッパークラス:

:値を格納するための

public class RegDatas { 

    private List<RegData> regDatas; 

    public List<RegData> getRegDatas() { 
     return regDatas; 
    } 

    public void setRegDatas(List<RegData> regDatas) { 
     this.regDatas = regDatas; 
    } 

} 

私のクラス

public class RegData { 
    private String email; 
    private String firstname; 
    private Gender gender; 

    public String getEmail() {return email;} 

    public void setEmail(String email) {this.email = email;} 

    public String getFirstname() {return firstname;} 

    public void setFirstname(String firstname) {this.firstname = firstname;} 

    public Gender getGender(){ return gender; } 

    public void setGender(Gender gender){ this.gender = gender; } 

} 

これは私がこのようにそれを実行する場合、私は見誤りである:

org.springframework.beans.NotReadablePropertyException: Invalid property 'RegDatas[0]' of bean class [de.ciss.aag.model.domain.RegData]: Bean property 'RegDatas[0]' is not readable or has an invalid getter method 
+0

これは正常に動作するように見えます。あなたはどんな問題を抱えていますか? POSTを実行するときに、 'regDatas'変数はあなたのコントローラに何を含んでいますか? – DaveyDaveDave

+0

このエラーが発生しました。org.springframework.beans.NotReadablePropertyException:Beanクラス[de.ciss.aag.model.domain.RegData]のプロパティ 'RegDatas [0]'が無効です:Beanプロパティ 'RegDatas [0]'が読み込めません。無効なゲッターメソッドを持っています – pepote

+0

いつエラーが表示されますか?フォームを送信するとき、または最初にページを読み込むときですか?モデルクラスを作成しているものはありますか?あなたの 'RegDatas.regDatas'リストには、ページがロードされるときに何かありますか? – DaveyDaveDave

答えて

0

あなたのコメントから、私はこの問題は、あなたのモデルがRegDatasオブジェクトが移入されていないということだと思います。このBaeldung tutorial - Getting Started with Forms in Spring MVC、特にあなたはすでにそれを見ていない場合はセクション4は、おそらく良い資源ですが、私はあなたのコントローラに(チュートリアルから)このようなものが必要だと思う:

@RequestMapping(value = "/employee", method = RequestMethod.GET) 
public ModelAndView showForm() { 
    return new ModelAndView("employeeHome", "employee", new Employee()); 
} 

しかし、あなたが必要です人の代わりに人口の多いRegDatasインスタンスをモデルに追加すると、非常に基本的な例として、これは自分のコードでうまくいくようです。モデルを作成する方法は他にもあります。リサーチすることをお勧めしますが、これはおそらく最も簡単です。

@RequestMapping("/your-page-endpoint") 
public ModelAndView get() { 
    return new ModelAndView("your-view-name", "regDatas", new RegDatas()); 
} 
+0

あなたの素早い応答ありがとう!私はそれを持っていると思う..コントローラから格納されたデータにアクセスする方法を知っているだろうか? – pepote

関連する問題