[Spring MVC] - Spring MVC의 여러 가지 매개 변수 바인딩 방식을 자세히 설명합니다.
1. 기본 데이터 유형(int의 경우 다른 유사):
Controller 코드:
@RequestMapping("saysth.do")
public void test(int count) {
}
<form action="saysth.do" method="post">
<input name="count" value="10" type="text"/>
......
</form>2. 포장 유형(Integer의 경우 기타 유사):
Controller 코드:
@RequestMapping("saysth.do")
public void test(Integer count) {
}
<form action="saysth.do" method="post">
<input name="count" value="10" type="text"/>
......
</form>3. 객체 유형 사용자 정의:
모델 코드:
public class User {
  private String firstName;
  private String 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("saysth.do")
public void test(User user) {
}
<form action="saysth.do" method="post">
<input name="firstName" value=" " type="text"/>
<input name="lastName" value=" " type="text"/>
......
</form>4. 복합 객체 유형 사용자 정의:
모델 코드:
public class ContactInfo {
  private String tel;
  private String address;
  public String getTel() {
    return tel;
  }
  public void setTel(String tel) {
    this.tel = tel;
  }
  public String getAddress() {
    return address;
  }
  public void setAddress(String address) {
    this.address = address;
  }
}
public class User {
  private String firstName;
  private String 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("saysth.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="saysth.do" method="post">
<input name="firstName" value=" " /><br>
<input name="lastName" value=" " /><br>
<input name="contactInfo.tel" value="13809908909" /><br>
<input name="contactInfo.address" value=" " /><br>
<input type="submit" value="Save" />
</form>5. List 바인딩:
List는 Controller 메서드의 매개 변수에 직접 쓸 수 없는 객체에 바인딩해야 합니다.
모델 코드:
public class User {
  private String firstName;
  private String 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("saysth.do")
public void test(UserListForm userForm) {
  for (User user : userForm.getUsers()) {
    System.out.println(user.getFirstName() + " - " + user.getLastName());
  }
}
<form action="saysth.do" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2"><input type="submit" value="Save" /></td>
</tr>
</tfoot>
<tbody>
<tr>
<td><input 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><input name="users[1].lastName" value="ddd" /></td>
</tr>
<tr>
<td><input name="users[2].firstName" value="eee" /></td>
<td><input name="users[2].lastName" value="fff" /></td>
</tr>
</tbody>
</table>
</form>
양식 코드:
<form action="saysth.do" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2"><input type="submit" value="Save" /></td>
</tr>
</tfoot>
<tbody>
<tr>
<td><input 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><input name="users[1].lastName" value="ddd" /></td>
</tr>
<tr>
<td><input name="users[20].firstName" value="eee" /></td>
<td><input name="users[20].lastName" value="fff" /></td>
</tr>
</tbody>
</table>
</form>
aaa - bbb
ccc - ddd
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
eee - fff
Set은 List와 유사하며 Controller 방법의 매개 변수에 직접 쓸 수 없으며 대상에 귀속되어야 합니다.단, Set 데이터를 귀속할 때, 반드시 먼저 Set 대상에add에 해당하는 수량의 모델 대상을 추가해야 한다.
모델 코드:
public class User {
  private String firstName;
  private String 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("saysth.do")
public void test(UserSetForm userForm) {
  for (User user : userForm.getUsers()) {
    System.out.println(user.getFirstName() + " - " + user.getLastName());
  }
}
<form action="saysth.do" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2"><input type="submit" value="Save" /></td>
</tr>
</tfoot>
<tbody>
<tr>
<td><input 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><input name="users[1].lastName" value="ddd" /></td>
</tr>
<tr>
<td><input name="users[2].firstName" value="eee" /></td>
<td><input name="users[2].lastName" value="fff" /></td>
</tr>
</tbody>
</table>
</form>
특별히 주의해야 할 것은 최대 하위 값이 Set의size보다 크면 org를 던진다는 것이다.springframework.beans.InvalidPropertyException 예외입니다.그래서 사용할 때 불편합니다.
7. 지도 바인딩:
맵이 가장 유연합니다. 또한 대상에 연결되어야 하며, 컨트롤러 방법의 매개 변수에 직접 쓸 수 없습니다.
모델 코드:
public class User {
  private String firstName;
  private String 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("saysth.do")
public void test(UserMapForm userForm) {
  for (Map.Entry<String, User> entry : userForm.getUsers().entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue().getFirstName() + " - " +
    entry.getValue().getLastName());
  }
}
<form action="saysth.do" method="post">
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tfoot>
<tr>
<td colspan="2"><input type="submit" value="Save" /></td>
</tr>
</tfoot>
<tbody>
<tr>
<td><input name="users['x'].firstName" value="aaa" /></td>
<td><input name="users['x'].lastName" value="bbb" /></td>
</tr>
<tr>
<td><input name="users['y'].firstName" value="ccc" /></td>
<td><input name="users['y'].lastName" value="ddd" /></td>
</tr>
<tr>
<td><input name="users['z'].firstName" value="eee" /></td>
<td><input name="users['z'].lastName" value="fff" /></td>
</tr>
</tbody>
</table>
</form>
x: aaa - bbb
y: ccc - ddd
z: eee - fff이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.