프로그래밍/Spring Framework

Spring <form:checkboxes> 항목 check

모지사바하 2013. 6. 3. 17:35
Note

<form:checkboxes items="${dynamic-list}" path="property-to-store" />

For multiple checkboxes, as long as the “path” or “property” value is equal to any of the “checkbox values – ${dynamic-list}“, the matched checkbox will be checked automatically.

 

위 말이 무슨 뜻인고 하니,,,

 

items 항목과 path 항목의 값이 같으면 자동으로 체크 된다 라는 뜻이다.

 

간단한 예제를 남긴다..

 

@RequestMapping(value = "/userlist", method = RequestMethod.GET)
 public void userlist(@Principal UserDetails userDetails, Model model){
  SecurityUser user = new SecurityUser();
  user.setFriendlist(userService.getFriend(userDetails.getUsername()));
  
  //현재 로그인한 user를 제외한 전체유저의 목록을 model 에 add한다.
  model.addAttribute("userlist", userService.userList(userDetails.getUsername()));
  //현재 로그인한 사용자의 친구목록을 셋팅한 SecurityUser를 model에 add한다.
  model.addAttribute("user",user);
  
 }

 

 

<form method="POST">
유저 목록 <p />
<!-- 모델에 추가된 현재 로그인한 SecurityUser 의 친구목록을 자동 checked 한다 -->
<!-- items의 userlist 는 전체 userlist이고 path의 user는 friendlist가 셋팅된 현재 로그인한 SecurityUser이다 -->
<form:checkboxes id="userlist" name="userlist" items="${userlist}" path="user.friendlist" delimiter="<br />" />
<p />
<input type="submit" />
</form>

 

 

위 jsp 소스를 보면 checkboxes 의 items 로 셋팅한 것은 현재 로그인한 user를 제외한 전체유저의 목록이다.

그리고 path로 셋팅한 것은 현재 로그인한 사용자의 친구목록을 셋팅한 SecurityUser이다.

 

 

이렇게 셋팅하면 값이 같은 항목을 자동으로 체크 해준다.

 

내가 처음 개발을 시작했던 2006년도만 해도 위와 같은 페이지를 개발하기 위해 jsp 에 for 와 if 로 점칠 됐었던 것에 비하면 정말 간단하고 깔끔하다.

딱, 이 소스 한줄이면 끝난다니..

<form:checkboxes id="userlist" name="userlist" items="${userlist}" path="user.friendlist" delimiter="<br />" />

 

 

간단한 몇장의 스샷..

 

 

 

그림1: 전체 user는 kwo2002,kwo2003,kwo2004 총 3명이다.

 

 

그림 2: kwo2002의 친구는 kwo2004 이다.

 

 

그림 3: 전체 친구 목록을 조회하면서, 현재 로그인한 사용자의 친구의 checkbox 를 체크한다.

 

당연한 이야기겠지만 , 전체 친구 목록에는 현재 로그인한 사용자인 kwo2002 는 제외 됐다.