-_-더럽게 헷갈렸다. 점하나 잘못찍어서 몇시간을 고생햇는지..
먼저 프로세스는 간단하다.
1. DB에서 select 태그에 뿌릴 화면을 가져와서 hidden으로 처리한다.
2. 스크립트 배열에 hidden 에 들어있는 값들을 집어 넣는다.
3. 저번에 했던 동적 테이블생성 쿼리에 select 를 추가한다.
말은 참 쉽다..ㅡ,.ㅡ 개인적으로 스크립트는 않배울려고 했는데.. 빠른 결과물을 내놓기 위해선 어쩔수 없이 나의 사상과 편협해야만 했다. 머.. 배워서 나쁠껀 없긴한데.
- 소스가 쫌 길다. (MVC 패턴으로 나누지 않았다. 사실 귀찮았다.)
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<%
//DB커넥션 부분. 보는바와 같이 오라클커넥션풀을 쓴다.
Connection con;
Statement stmt;
ResultSet rset;
Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@IP:PORT:TNS이름", "계정아이디","패스워드");
stmt = con.createStatement();
//DB에서 얻은 정보를 넣을 벡터
Vector vhenhouse = new Vector();
try {
//쿼리를 날려준다.
String query =
"select dtcd, dtcd_nm from ba_dtcd " +
"order by dtcd ";
rset = stmt.executeQuery(query);
while (rset.next()) {
Hashtable htdrug = new Hashtable();
if (rset.getString("dtcd_nm") != null) {
htdrug.put("dtcd_nm", rset
.getString("dtcd_nm"));
} else {
htdrug.put("dtcd_nm", " ");
}
if (rset.getString("dtcd") != null) {
htdrug.put("dtcd", rset
.getString("dtcd"));
} else {
htdrug.put("dtcd", " ");
}
vhenhouse.addElement(htdrug);
}
rset.close();
} catch (java.lang.Exception ex) {
System.out.println("에라 발생6 = " + ex.getMessage());
ex.printStackTrace();
}
//DB종료
stmt.close();
con.close();
%>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
<script language="javascript">
//jsp 페이지가 시작되자마자 실행된다.
function window::onload(){raceinput()}
//select 의 값과 명칭을 넣을 배열들
var vhenhousenm = new Array();
var vhenhousecd = new Array();
var count = 1;
var addCount;
//행추가
function addInputBox() {
for(var i=1; i<=count; i++) {
if(!document.getElementsByName("test"+i)[0]) {
addCount = i;
break;
}
else addCount = count;
}
var addStr = "<tr><td width=10><input type=text value ="+addCount+" name=test"+addCount+" size=2></td>";
//select 문을 정의 했다. for문을 돌려서 배열에 있는 값들을 스트링처럼 추가하는 형식이다.
addStr += "<td width=10><select name=race> <option value=''>-----</option>";
for( j = 0;j<vhenhousecd.length; j++){
addStr += "<option value='"+vhenhousecd[j]+"'>"+vhenhousenm[j]+"</option>";
}
addStr += "</td></select> </td><td width=10><input type=text value ="+addCount+" name=ttest"+addCount+" size=8></td></tr>";
var table = document.getElementById("dynamic_table");
var newRow = table.insertRow();
var newCell = newRow.insertCell();
newCell.innerHTML = addStr;
count++;
}
//DB에서 받은 값을 스크립트 배열에 넣는 함수이다.
function raceinput(){
//먼저 for문을 몇번 돌릴지 벡터의 길이를 가져온다.(vhenhousecount 라는 hidden으로 넣어놨다.)
var count = my_form.vhenhousecount.value;
//위에서 얻은 count로 배열에 hidden값에 있는 값들을 집어 넣는다. (push()함수사용)
// 스크립트는 편하게 스택처럼 배열을 사용할수 있도록 함수가 마련되있어서 좋다.
for(i=0; i<count; i++){
//race.push(document.my_form.["racehidden"+i].value);
var testemp = eval("my_form.vhenhousenmhidden"+i).value;
vhenhousenm.push(testemp);
testemp = eval("my_form.vhenhousecdhidden"+i).value;
vhenhousecd.push(testemp);
//alert(race.pop(i));
}
}
</script>
</head>
<body -nLoad="addInputBox()">
<form name="my_form" >
<!--DB에서 얻은 벡터의 길이를 포함하는 hidden -->
<input type="hidden" value="<%=vhenhouse.size() %>" name="vhenhousecount">
<!--or문을 돌면서 hidden으로 DB에서 얻은 정보를 넣는다.-->
<%
for (int i = 0; i < vhenhouse.size(); i++) {
Hashtable htDelivery = (Hashtable) vhenhouse.get(i);
%>
<input type="hidden" value="<%=htDelivery.get("dtcd_nm") %>" name="vhenhousenmhidden<%=i%>">
<input type="hidden" value="<%=htDelivery.get("dtcd") %>" name="vhenhousecdhidden<%=i%>">
<%} %>
<input type="button" value="행 추가" onClick="javascript:addInputBox();">
<table cellpadding=0 cellspacing=0 id="dynamic_table" border="1">
</table>
</form>
</body>
</html>
결과화면
주석으로 최대한 프로세스대로 자세하게 써 놨으니. 필요하면 뻘건 주석을 참고하기 바란다.
다른 방법으론 select자체를 않보이게 하고 <div style="display:none"> 처리로 않보이게 한다음
option의 객체만을 추가하는 곳에 링크만 해주면 된다는데...-_- 몰겠다..ㅋㅋ
'web > JSP' 카테고리의 다른 글
JSP 소스 프리징 현상. 소스반영 안됨 현상. (0) | 2010.12.09 |
---|---|
JSP Forward 와 Redirect 의 차이 (8) | 2010.12.03 |
jsp script 시작시 자동 실행 (0) | 2010.11.25 |
jsp 표현언어 안되는건 안될수밖에.. (0) | 2010.11.21 |
jsp String에 대한 고찰.. (0) | 2010.11.19 |