Javascript 서버 요청 전 처리 방법
Javascript Validation 체크
처리 전 확인 창 띄우기
const saveYn = confirm("~를 등록하시겠습니까?");
if(saveYn == false) {
return;
}
1자리 이상 입력 필수
const id = document.getElementById('id');
if(!id.value) {
alert("아이디를 입력해주세요.");
id.focus();
return;
}
파라미터 처리 및 서버 요청
fost 요청 시 formData에 List 담아 보내기
const ctgryList = document.getElementsByName("ctgryList");
ctgryList.forEach((item) => {
formData.append("ctgryList", item.value);
});
컨트롤러에서는 아래와 같은 파라미터로 List를 받을 수 있습니다.
@RequestParam List<String> ctgryList
javascript로 form submit
const form = document.createElement('form');
form.method = 'post';
form.action = '/URL주소';
const field = document.createElement('input');
field.type = 'hidden';
field.name = '인풋네임';
field.value = '값';
form.appendChild(field);
document.body.appendChild(form);
form.submit();
form과 input 요소를 생성하여 요청할 수 있습니다.
form 인풋 값 변경
const form = document.getElementById("formID");
form.elements["inputName"].value = '값';
name 속성으로 인풋을 찾아서 값을 변경합니다.
체크박스 전송 시
<form name="Form명" id="Form명" method="post" onsubmit="return false;">
<div class="toggle-wrap">
<div class="toggle-btn">
<input type="checkbox" class="checkbox" id="체크박스ID" name="체크Yn" value="N">
<div class="knobs"></div>
<div class="layer"></div>
</div>
</div>
</form>
체크박스 input은 checked 되지 않으면 서버에 전송되지 않습니다.
<form name="Form명" id="Form명" method="post" onsubmit="return false;">
<input type="hidden" name="체크Yn" value="N"/>
<div class="toggle-wrap">
<div class="toggle-btn">
<input type="checkbox" class="checkbox" id="체크박스ID" value="N">
<div class="knobs"></div>
<div class="layer"></div>
</div>
</div>
</form>
체크박스 input 대신 hidden input으로 전달하면 checked 되지 않은 값도 서버에 전송이 됩니다.
체크여부 전송 스크립트 예시
if ($("#체크박스ID").prop("checked")) {
form.elements["체크Yn"].value = 'Y';
} else {
form.elements["체크Yn"].value = 'N';
}
// form 전송 처리
컨트롤러에서 동일 name 다중 인풋 VO 자동 매핑 예시
@RequestMapping(value = "/구분/컨트롤러명.do")
public ModelAndView 컨트롤러명(HttpServletRequest req, HttpServletResponse res, VO클래스명 객체명) throws Exception {
ModelAndView mav = new ModelAndView();
// 컨트롤러 처리
mav.setViewName("jsonView");
return mav;
}
같은 name의 다중 인풋을 컨트롤러 파라미터에서 VO 내 배열 변수에 매핑시켜줄 수 있습니다.
@SuppressWarnings("serial")
public class VO클래스명 extends BaseVO implements Serializable {
private String[] 체크Yn;
public String[] get체크Yn() {
if (this.체크Yn != null) {
String[] tempData = new String[this.체크Yn.length];
System.arraycopy(this.체크Yn, 0, tempData, 0, this.체크Yn.length);
return tempData;
} else {
return null;
}
}
public void set체크Yn(String[] 체크Yn) {
if (체크Yn != null) {
this.체크Yn = new String[체크Yn.length];
System.arraycopy(체크Yn, 0, this.체크Yn, 0, 체크Yn.length);
} else {
this.체크Yn = null;
}
}
}
Leave a comment