[ModelMapper / Thymeleaf] checkbox value 바인딩 하기

eugene.yi·2022년 10월 13일
0

ModelMapper는 어떤 Object에 있는 필드값을 자동으로 다른 Object 필드에 매핑해주는 라이브러리 이다.

체크박스의 체크 여부에 따라 Y/N의 값으로 받아오기 위해서,
vo의 Boolean typedto의 String type으로 매칭해주려고 한다.

  1. vo
public class InfoVo {
	private String name;
    private String phone;
    private Boolean mailYn;   
}
  1. dto
public class InfoDto {
	private String name;
    private String phone;
    private String mailYn;
}
  1. html
<input type="checkbox" name="mailYn">
<input type="hidden" name="_mailYn">

thymeleaf에서는 위와같이 name에 _(underscore)를 붙인 hidden input을 추가해주면
체크박스를 체크하지 않은 경우에 null이 아닌 false값을 보내준다.

  1. Controller
public String saveTrial(InfoVo vo) {
	
    //modelMapper는 빈 등록 후 주입받아 사용.
   modelMapper.typeMape(InfoVo.class, InfoDto.class).addMappings(mapper -> {
   		mapper.using((Converter<Boolean, String>) context -> context.getSource() ? "Y" : "N" )
        	.map(InfoVo::getMailYn, InfoDto::setMailYn);
   });
   
   InfoDto dto = modelMapper.map(vo, InfoDto.class);
   ...
}

source와 destination의 데이터 타입이 다른 경우, Converter 인터페이스를 사용하면 변환이 가능하다.

0개의 댓글