인트라넷 개발 중 결제 시스템을 만들면서 경험한 사항이다.
오늘 거의 3시간 동안 고민을 했는데, 문제는 다름아닌…
결제 시스템의 결제자 리스트가 Select Box에 있는데 분명 FORM에서 POST방식은 값이 한개 밖에 전송이 안되었다.
그렇다면, 결제자 리스트를 어떻게 보내야 하는가?
라는 문제에서 비롯되, 몇가지 방법을 찾았는데 그 방법을 잠시 소개할까 한다.
셀렉트 폼은 다음과 같다.
<select name=”sel” size=”5″ id=”select” style=”width:100px”>
</select>
물론, 내부에 <option></option> 들은 자바스크립트로 추가/삭제 기능을 만들어 두었다.
문제는 이 많은 결제자를 어떻게 순서대로 JSP로 보내서 DB에 등록할 수 있을까?
우선 멀티 셀렉트 속성을 집어넣어야 한다.
<select name=”sel” MULTIPLE size=”5″ id=”select” style=”width:100px”>
</select>
다음은 폼 전송시에 자바스크립트 함수를 거치게 만든다.
<form method=”post” name=”settleForm” onsubmit=”return settleFormCheck();”>
다음은 자바스크립트 내의 폼 체크 부분이다.
function settleFormCheck(){
var frm = document.settleForm;
AllSelect();
frm.action = “write_DB.jsp”;
return true;
}
이 AllSelect() 부분이 중요한데, 이는 select 부분을 모두 선택한 것처럼 만든다.
function AllSelect(){
var obj = document.all.sel;
try{
for( var i=0 ; i<obj.length ; i++ ){
obj.options[i].selected = true;
}
}catch(e){}
}
이렇게 하면 Select들이 모두 선택되고, Write_DB.jsp로 넘어가게 된다.
위의 내용은 입력 폼 내부에서 설정할 내용이고, 이제 JSP에서 어떻게 받아야 하는가를 알아보자.
일반적으로 JSP에서 POST로 넘어온 값을 받을 때는 다음과 같이 받는다.
String sh = request.getParameter(“sh”);
그러나 위의 select 같이 다중 객체들이 POST방식으로 넘어올 경우에는 다음을 써준다.
String[] sel = request.getParameterValues(“sel”);
그러면… sel 배열에 하나 두울 결제자들의 아이디가 들어가게 된다는 ^^
이제는 알아서 알고리즘을 제작해주면 된다.
히야… 힘든 과정이었는데… 참고로 안된다면 request를 multi로 바꿔보기 바란다.. 필자는 multi로 작업해서 됬을지도.. 뭐 상관없지만 ^^;