2017-03-03 13 views
0

は、これはこれは私のモデルクラスです user.java私のコントローラクラスリストデータをスプリングコントローラにバインドするにはどうすればいいですか?

package com.myblog.controller; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.ModelAttribute; 
import org.springframework.web.bind.annotation.PostMapping; 

import com.myblog.model.User; 

@Controller 
public class UserController { 

    private static final Logger log = LoggerFactory.getLogger(UserController.class); 

    @GetMapping(value="/user") 
    public String getUser(Model model){ 
     model.addAttribute("user", new User()); 
     return "user"; 
    } 
    @PostMapping(value="/user") 
    public String postUser(@ModelAttribute("user") User user){ 
     log.info("user :"+user); 
     return "user"; 
    } 
} 

ある

package com.myblog.model; 

import java.util.ArrayList; 
import java.util.List; 

public class User { 

    private int id; 
    private String name; 
    private List<Address> address=new ArrayList<Address>(); 

    @Override 
    public String toString() { 
     return "User [name=" + name + ", address=" + address + "]"; 
    } 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public List<Address> getAddress() { 
     return address; 
    } 
    public void setAddress(List<Address> address) { 
     this.address = address; 
    } 


} 

address.java

package com.myblog.model; 


public class Address { 

    private int id; 
    private String street; 
    private String city; 

    public int getAddid() { 
     return addid; 
    } 
    public void setAddid(int addid) { 
     this.addid = addid; 
    } 
    public String getStreet() { 
     return street; 
    } 
    public void setStreet(String street) { 
     this.street = street; 
    } 
    public String getCity() { 
     return city; 
    } 
    public void setCity(String city) { 
     this.city = city; 
    } 

} 

これは私のthymeleafのHTMLページ

<!DOCTYPE html> 
<html xmlns:th="http://www.thymeleaf.org"> 
<head> 
<title>Page Title</title> 
<link href="/static/css/bootstrap.min.css" rel="stylesheet" media="screen" th:href="@{css/bootstrap.min.css}"/> 
<script src="/static/js/bootstrap.min.js" th:src="@{js/bootstrap.min.js}"></script> 
      </head> 
    <body> 
    <div class="container"> 
    <h1> User Account</h1> 
    <form class="form-horizontal" th:action="@{/user}" method="POST" th:object="${user}"> 
     <div class="form-group"> 
     <label for="inputDescription" class="col-sm-2 control-label">Full Name</label> 
     <div class="col-sm-5"> 
      <input type="text" class="form-control" name="name" placeholder="Full name"/> 
     </div> 
     </div> 
     <div class="form-group"> 
     <label for="inputDescription" class="col-sm-2 control-label">Address</label> 
     <div class="col-sm-5"> 
      <input type="text" class="form-control" name="address.city" placeholder="City"/> 
     </div> 
     </div> 

    <div class="form-group"> 
      <label for="inputDescription" class="col-sm-2 control-label">Street</label> 
     <div class="col-sm-5"> 
        <input type="text" class="form-control" name="address.street" placeholder="street" /> 
      </div> 
     </div> 
     <div class="form-group"> 
      <label class="col-sm-2 control-label"></label> 
      <div class="col-sm-10"> 
       <input type="submit" class="btn btn-primary" value="Add"/> 
      </div> 
     </div> 
    </form> 
    </div> 
    </body> 
    </html> 
です コントローラーユーザーオブジェクトの

は、データをアドレスモデルオブジェクトにバインドしません。 出力はuser:user [name = "name"、address []]

答えて

1

あなたのフォームはアドレスを1つしか管理していないようですが、ドメインモデルはアドレスのリストを指定しています。この場合、最初のアドレスにはaddress [0] .streetのような入力フィールドを指定する必要があります。

私はあなたのフォームですべてのアドレスを管理しやすいようにするために、thymleafイテレータ(th:each)を使用することを考えます。次に、名前属性を定義する代わりにth:fieldを使用します。これはあなたの問題を解決するはずです。

+0

私がしようとしました:これは –

+0

に動作していない '目= "* {user.address.city}" フィールド' アンスガー番目ありがとう:フィールドには、= "アドレス[0] .street"「私はドン –

+0

作業thymleafの構文を正確に知っていますが、 'th:each =" anAddress:* {address} 'のようなことをすることができ、ループの中で' th:field = "$ {anAddress.street}" 'for例えば、私は完全にはわかりません。 –

0
<form class="form-horizontal" th:action="@{/user}" method="POST" th:object="${user}"> 
    <div class="form-group"> 
    <label for="inputDescription" class="col-sm-2 control-label">Full Name</label> 
    <div class="col-sm-5"> 
     <input type="text" class="form-control" th:field="*{name}" placeholder="Full name"/> 
    </div> 
    </div> 
    <div class="form-group"> 
    <label for="inputDescription" class="col-sm-2 control-label">Address</label> 
    <div class="col-sm-5"> 
     <input type="text" class="form-control" th:field="*{address[0].city}" placeholder="City"/> 
    </div> 
    </div> 

<div class="form-group"> 
    <label for="inputDescription" class="col-sm-2 control-label">Street</label> 
    <div class="col-sm-5"> 
     <input type="text" class="form-control" th:field="*{address[0].street}" placeholder="street" /> 
    </div> 
    </div> 
    <div class="form-group"> 
     <label class="col-sm-2 control-label"></label> 
     <div class="col-sm-10"> 
      <input type="submit" class="btn btn-primary" value="Add"/> 
     </div> 
    </div> 
</form> 
関連する問題