체크박스를 여러개 클릭했을때 여러 값을 받아오기 위해서는 어떻게 해야할까.
체크박스 속성 중 name값을 모두 다르게 준다면 받아 올 수 있겠지만, 여러 변수로 관리해야 하는 복잡함이 생긴다.
name 값을 모두 같게 하여 value값을 받아 올 수 있는 방법이 있다면, 다중 선택에 대한 해결책이 될 수 있을 것이다.
<form action="/practiceCheckbox" method="post">
<button>send</button>
<table>
<tr>
<td>A<input type="checkbox" name="multiCheck" value="A" /></td>
<td>B<input type="checkbox" name="multiCheck" value="B" /></td>
<td>C<input type="checkbox" name="multiCheck" value="C" /></td>
<td>D<input type="checkbox" name="multiCheck" value="D" /></td>
</tr>
</table>
</form>
form 태그로 매핑에 대한 정보와, POST 방식으로 파라미터를 넘겨주었다.
각각의 체크박스는 같은 name을 갖고 있고 value만 다르게 작성해 주었다.
컨트롤러 부분에서는 체크된 여러 값들에 대한 파라미터를 받아오는 것과 이 파라미터를 변수에 저장하여 확인하는 부분까지 다뤄보겠다.
@Controller
public class PracticeMultiParams {
@RequestMapping(value = "/checkbox")
public String goCheckbox(){
return "practice/checkbxParams";
}
@RequestMapping(value = { "/practiceCheckbox" }, method = RequestMethod.POST)
public void practiceMultiParam(HttpServletRequest httpServletRequest){
String[] multiValue = httpServletRequest.getParameterMap().get("multiCheck");
System.out.println("check");
}
}
값을 받아오는 기능은 서블릿의 HttpServletRequest 클래스를 사용하였다.
Spring은 내부적으로 servlet의 기능을 통해서 동작하기 때문에 Spring 내부 어디에서든지 servlet 기능을 사용할 수 있다.
httpServletRequest.getParameterMap().get("multiCheck");
체크박스의 name의 값을 이용해서 Map방식으로 불러와지는 것을 확인 할 수 있다.