Programming/Spring

[스프링] input type = "date" 또는 "datetime-local" 에 데이터베이스에 저장된 날짜 세팅하기

helloworld: 2021. 8. 16. 03:26

거래처 테이블의 일부, ※ 오라클 데이터베이스

 

저장된 날짜를 아래와 같이 화면에 출력하고 싶다. 어떻게 해야 할까?

 

 

데이터베이스에 input type="date"나 "datetime-local"에 세팅된 값을 저장하는 건 크게 무리가 없었는데

반대로 데이터베이스에 저장된 날짜를 인풋에 세팅하는 건 어떻게 해야 하는지 좀 헤맸다.

처음엔 프론트에서 해결하려고 자바스크립트를 이용했는데 의도대로 작동이 안 돼서... 고민하다가

아예 서버단에서 인풋에 필요한 형식으로 날짜를 다시 DTO빈에 세팅하기로 했다.

진작 이렇게 할 걸... 아니면 더 좋은 방법이 있을까? 궁금하다.


아래는 jsp 해당 부분

<div class="wrap">
	<div class="contract">
		<span class="label">계약기간</span>
			<div class="css">
				<form:input type="date" path="contract_period_s" value="${searchResult.contract_period_s }" />
			</div>

				<form:input type="date" path="contract_period_e" value="${searchResult.contract_period_e }" />
	</div>
</div>

<div class="group">
	<div class="wrap">
		<span class="label">등록정보</span>
			<form:input type="text" path="regi_info_man" value="${searchResult.regi_info_man }" />
			<form:input type="datetime-local" path="regi_info_date" value="${searchResult.regi_info_date }" />
	</div>
	<div class="wrap">
		<span class="label">변경정보</span>
			<form:input type="text" path="modi_info_man" value="${searchResult.modi_info_man }" />
			<form:input type="datetime-local" path="modi_info_date" value="${searchResult.modi_info_date }" />
	</div>
</div>

input type="date"와 "datetime-local"의 value에

jsp 표현언어를 이용하여( ${  } )

서버에서 받은 빈의 값을 세팅한다.


컨트롤러 해당 부분

//더블클릭 시 우측 상세 조회
@GetMapping("custom/detail")
@ResponseBody
public String detailCustomInfo(@RequestParam("busi_num") String busi_num, @ModelAttribute("searchCustomBean") CustomBean searchCustomBean, @ModelAttribute("saveCustomBean") CustomBean saveCustomBean, HttpSession session) {
	searchCustomBean = mainService.detailCustomInfo(busi_num.trim());
		
	//날짜 세팅
	searchCustomBean.setContract_period_s(searchCustomBean.getContract_period_s().substring(0,10));
	searchCustomBean.setContract_period_e(searchCustomBean.getContract_period_e().substring(0,10));
		
	searchCustomBean.setRegi_info_date(searchCustomBean.getRegi_info_date().substring(0, 10)+"T"+searchCustomBean.getRegi_info_date().substring(11));
	searchCustomBean.setModi_info_date(searchCustomBean.getModi_info_date().substring(0, 10)+"T"+searchCustomBean.getModi_info_date().substring(11));
		
	session.setAttribute("searchResult", searchCustomBean); // ** 꼭 세션에 바인딩을 해서 전달을 해야 하나..? 다른 방법은..?
	System.out.println("scb" + busi_num + searchCustomBean);
	return "ok";
}

 

데이터베이스에서 거래처 정보를 받아 빈에 세팅하고,

필요한 날짜를 게터, 세터를 이용하여

input type="date"와 "datetime-local"의 value에 적합한 형식으로 가공하고 DTO빈에 다시 세팅한다.


//input type="date" 

searchCustomBean.setContract_period_s(searchCustomBean.getContract_period_s().substring(0,10));


//input type="datetime-local"


searchCustomBean.setRegi_info_date(

    searchCustomBean.getRegi_info_date().substring(0, 10) +

    "T" +

    searchCustomBean.getRegi_info_date().substring(11)

);