-----------------------------
직원관리 Servlet(MVC 패턴) 방식
- 서블릿 주소를 확장자 형태 사용.
- web.xml 파일에는 확장자 형태의 주소 한 개만 등록
- 주소 분석 및 액션 요청을 위한 전용 서블릿 클래스 작성.
- 액션 담당 전용 클래스 작성.
** 환경 설정 추가 -> WEB-INF/source 폴더 하위에 JSP 페이지 등록
1. 직원 정보 출력, 입력, 삭제, 수정 기능 구현
- 직원 정보에 대한 입력, 출력, 검색, 삭제, 수정 기능 구현
- 직원 정보는 employee 테이블에 저장된다.
- 지역 정보는 region 테이블에 저장된다.
- 부서 정보는 department 테이블에 저장된다.
- 직위 정보는 position 테이블에 저장된다.
- 직원 정보 입력 항목은 직원 번호, 이름, 주민번호(암호화 기능), 생년월일(jQuery 달력 기능), 양음력, 전화번호, 부서아이디, 직위아이디, 지역아이디, 기본급, 수당으로 구성
- 직원 정보 입력시 기본급은 직위별 최소 기본급 이상 입력되도록 한다(Ajax 기능 이용).
- 직원 정보 출력 항목은 직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여로 구성
- 직원 정보 출력시 항목별 정렬 기능 구현
- 직원 정보 검색은 사번, 주민번호, 이름, 부서, 지역, 직위 등의 항목을 기준으로 검색 결과를 출력하도록 구현
- 직원 삭제는 사번(PK)을 기준으로 삭제할 수 있도록 구현
- 직원 수정은 사번(PK)을 기준으로 수정할 수 있도록 구현
2. 직원 정보
- 직원 번호, 이름, 주민번호, 생년월일, 양음력, 전화번호, 부서, 직위, 지역, 기본급, 수당, 급여(기본급+수당)
- 부서 : 개발부, 마케팅부, 영업부
- 직위 : 사원, 대리, 과장, 부장
- 지역 : 서울, 경기, 인천, ...
- 기본급 : 직위별 최소 기본급 이상
3. 부서 정보 출력, 입력, 삭제, 수정 기능 구현
- 부서번호, 부서이름, 삭제가능여부, 수정 기능 추가
4. 직위 정보 출력, 입력, 삭제, 수정 기능 구현
- 직위번호, 직위이름, 최소기본급, 삭제가능여부, 수정 기능 추가
5. 지역 정보 출력, 입력, 삭제, 수정 기능 구현
- 지역번호, 지역이름, 삭제가능여부, 수정 기능 추가
6. 관리자, 일반 직원 로그인 과정 추가
- 관리자 로그인한 경우는 모든 기능 사용 가능.
- 일반 직원 로그인한 경우는 일부 기능 사용 가능. 직원 정보 일부 출력 기능으로 한정. 직원 정보 일부 출력 항목은 직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명로 구성. 검색 기능 추가. 사번, 이름, 부서, 지역, 직위 등의 항목을 기준으로 검색 결과를 출력하도록 구현
7. 데이터베이스 구성 (employee, region, position, department)
--지역 정보 테이블
CREATE TABLE region (
regionId NUMBER --PK
, regionName NVARCHAR2(30)
);
ALTER TABLE region
ADD CONSTRAINT region_id_pk
PRIMARY KEY(regionId);
CREATE SEQUENCE regionSeq;
INSERT INTO region (regionId, regionName)
VALUES (regionSeq.nextval, '서울');
INSERT INTO region (regionId, regionName)
VALUES (regionSeq.nextval, '경기');
INSERT INTO region (regionId, regionName)
VALUES (regionSeq.nextval, '인천');
COMMIT;
--직위 정보 테이블
CREATE TABLE position (
positionId NUMBER --PK
, positionName NVARCHAR2(30)
, minBasicPay NUMBER
);
ALTER TABLE position
ADD CONSTRAINT position_id_pk
PRIMARY KEY(positionId);
CREATE SEQUENCE positionSeq;
INSERT INTO position (positionId, positionName, minBasicPay)
VALUES (positionSeq.nextval, '사원', 1000000);
INSERT INTO position (positionId, positionName, minBasicPay)
VALUES (positionSeq.nextval, '대리', 2000000);
INSERT INTO position (positionId, positionName, minBasicPay)
VALUES (positionSeq.nextval, '부장', 3000000);
COMMIT;
--부서 정보 테이블
CREATE TABLE department (
departmentId NUMBER --PK
, departmentName NVARCHAR2(30)
);
ALTER TABLE department
ADD CONSTRAINT department_id_pk
PRIMARY KEY(departmentId);
CREATE SEQUENCE departmentSeq;
INSERT INTO department (departmentId, departmentName)
VALUES (departmentSeq.nextval, '개발부');
INSERT INTO department (departmentId, departmentName)
VALUES (departmentSeq.nextval, '마케팅부');
INSERT INTO department (departmentId, departmentName)
VALUES (departmentSeq.nextval, '영업부');
COMMIT;
--직원 정보 테이블
--직원 번호, 이름, 주민번호, 생년월일, 양음력, 전화번호, 부서, 직위, 지역, 기본급, 수당
CREATE TABLE employee (
employeeId NUMBER --PK
,name NVARCHAR2(10)
,ssn VARCHAR2(30) --오라클 암호화 기능 추가
,birthday DATE
,lunar NUMBER(1) --양력 0, 음력 1
,telephone VARCHAR2(30)
,departmentId NUMBER --FK
,positionId NUMBER --FK
,regionId NUMBER --FK
,basicPay NUMBER
,extraPay NUMBER
);
ALTER TABLE employee
ADD CONSTRAINT EMPLOYEE_ID_PK
PRIMARY KEY(employeeId);
ALTER TABLE employee
ADD CONSTRAINT employee_departmentId_fk
FOREIGN KEY (departmentId)
REFERENCES department(departmentId);
ALTER TABLE employee
ADD CONSTRAINT employee_positionId_fk
FOREIGN KEY (positionId)
REFERENCES position(positionId);
ALTER TABLE employee
ADD CONSTRAINT employee_regionId_fk
FOREIGN KEY (regionId)
REFERENCES region(regionId);
ALTER TABLE employee
ADD CONSTRAINT employee_lunar_ck
CHECK (lunar=0 OR lunar=1);
CREATE SEQUENCE employeeSeq;
INSERT INTO employee (employeeId
,name
,ssn
,birthday
,lunar
,telephone
,departmentId
,positionId
,regionId
,basicPay
,extraPay)
VALUES (employeeSeq.nextval
, '홍길동'
, encrypt('8012121122345', '홍길동')
, '1980-12-12'
, 0 --양력 0, 음력 1
, '010-123-1234'
, 1 --departmentId FK
, 1 --positionId FK
, 1 --regionId FK
, 1500000
, 1000000);
INSERT INTO employee (employeeId
,name
,ssn
,birthday
,lunar
,telephone
,departmentId
,positionId
,regionId
,basicPay
,extraPay)
VALUES (employeeSeq.nextval
, '박길동'
, encrypt('8201101234567', '박길동')
, '1982-01-10'
, 1 --양력 0, 음력 1
, '010-456-4567'
, 2 --departmentId FK
, 1 --positionId FK
, 2 --regionId FK
, 1800000
, 1000000);
COMMIT;
--직원 정보 출력 쿼리 (JOIN, SubQuery)
직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여(기본급+수당)
SELECT employeeId
, name
, ssn
, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday
, lunar
, DECODE(lunar, 0, '양력', '음력') AS lunarName
, telephone
, departmentId
, (SELECT departmentName FROM department
WHERE departmentId=e.departmentId )
AS departmentName
, positionId
, (SELECT positionName FROM position
WHERE positionId=e.positionId )
AS positionName
, regionId
, (SELECT regionName FROM region
WHERE regionId=e.regionId )
AS regionName
, basicPay
, extraPay
, (basicPay + extraPay) AS pay
FROM employee e
ORDER BY employeeId;
--> 뷰 생성
CREATE OR REPLACE VIEW employeeView
AS
SELECT employeeId
, name
, ssn
, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday
, lunar
, DECODE(lunar, 0, '양력', '음력') AS lunarName
, telephone
, departmentId
, (SELECT departmentName FROM department
WHERE departmentId=e.departmentId )
AS departmentName
, positionId
, (SELECT positionName FROM position
WHERE positionId=e.positionId )
AS positionName
, regionId
, (SELECT regionName FROM region
WHERE regionId=e.regionId )
AS regionName
, basicPay
, extraPay
, (basicPay + extraPay) AS pay
FROM employee e;
-->뷰를 이용해서 SELECT 쿼리 실행
SELECT employeeId
, name
, birthday
, lunar
, lunarName
, telephone
, departmentId
, departmentName
, positionId
, positionName
, regionId
, regionName
, basicPay
, extraPay
, pay
FROM employeeView
ORDER BY employeeId;
--직원 정보 검색 쿼리
SELECT employeeId
, name
, birthday
, lunar
, lunarName
, telephone
, departmentId
, departmentName
, positionId
, positionName
, regionId
, regionName
, basicPay
, extraPay
, pay
FROM employeeView e
--WHERE ssn=encrypt('8012121122345',e.name)
--WHERE employeeId=1
--WHERE name='홍길동'
--WHERE regionName='서울'
--WHERE departmentName='개발부'
WHERE positionName='사원'
ORDER BY employeeId;
--지역 정보 출력
SELECT regionId, regionName
, (SELECT COUNT(*) FROM employee
WHERE regionId=r.regionId) AS delCheck
FROM region r
ORDER BY regionId;
-->뷰 생성
CREATE OR REPLACE VIEW regionView
AS
SELECT regionId, regionName
, (SELECT COUNT(*) FROM employee
WHERE regionId=r.regionId) AS delCheck
FROM region r;
-->뷰를 이용한 SELECT 쿼리
SELECT regionId, regionName, delCheck
FROM regionView
ORDER BY regionId;
--부서 정보 출력
SELECT departmentId, departmentName
, (SELECT COUNT(*) FROM employee
WHERE departmentId=r.departmentId) AS delCheck
FROM department r
ORDER BY departmentId;
-->뷰 생성
CREATE OR REPLACE VIEW departmentView
AS
SELECT departmentId, departmentName
, (SELECT COUNT(*) FROM employee
WHERE departmentId=r.departmentId) AS delCheck
FROM department r;
-->뷰를 이용한 SELECT 쿼리
SELECT departmentId, departmentName, delCheck
FROM departmentView
ORDER BY departmentId;
--직위 정보 출력
SELECT positionId, positionName, minBasicPay
, (SELECT COUNT(*) FROM employee
WHERE positionId=r.positionId) AS delCheck
FROM position r
ORDER BY positionId;
-->뷰 생성
CREATE OR REPLACE VIEW positionView
AS
SELECT positionId, positionName, minBasicPay
, (SELECT COUNT(*) FROM employee
WHERE positionId=r.positionId) AS delCheck
FROM position r;
-->뷰를 이용한 SELECT 쿼리
SELECT positionId, positionName, minBasicPay, delCheck
FROM positionView
ORDER BY positionId;
--최소기본급 검색 쿼리
SELECT minBasicPay
FROM positionView
WHERE positionId=1;
--------------------------------------
--관리자 기능 부여를 위해서 grade 컬럼 추가
--관리자 0, 일반 1
ALTER TABLE employee
ADD (grade NUMBER(1) DEFAULT 1);
UPDATE employee SET grade=0
WHERE employeeId=1;
COMMIT;
CREATE OR REPLACE VIEW employeeView
AS
SELECT employeeId
, name
, ssn
, TO_CHAR(birthday, 'yyyy-mm-dd') AS birthday
, lunar
, DECODE(lunar, 0, '양력', '음력') AS lunarName
, telephone
, departmentId
, (SELECT departmentName FROM department
WHERE departmentId=e.departmentId )
AS departmentName
, positionId
, (SELECT positionName FROM position
WHERE positionId=e.positionId )
AS positionName
, regionId
, (SELECT regionName FROM region
WHERE regionId=e.regionId )
AS regionName
, basicPay
, extraPay
, (basicPay + extraPay) AS pay
, grade
FROM employee e;
-->뷰를 이용해서 SELECT 쿼리 실행
SELECT employeeId
, name
, birthday
, lunar
, lunarName
, telephone
, departmentId
, departmentName
, positionId
, positionName
, regionId
, regionName
, basicPay
, extraPay
, pay
, grade
FROM employeeView
ORDER BY employeeId;
--관리자 아이디(이름), 패스워드(주민번호) 검사 쿼리
SELECT COUNT(*) AS count
FROM employeeView
WHERE name='아이디'
AND ssn=encrypt('패스워드', '아이디')
AND grade=0;
--일반직원 아이디(이름), 패스워드(주민번호) 검사 쿼리
SELECT COUNT(*) AS count
FROM employeeView
WHERE name='아이디'
AND ssn=encrypt('패스워드', '아이디');
-----------------------------------------
수정 기능 추가
--직원 정보 수정 쿼리
UPDATE employee SET birthday='1980-12-12'
,lunar=0
,telephone='010-456-4567'
,departmentId=1
,positionId=1
,regionId=1
,basicPay=1500000
,extraPay=1000000
,grade=0
WHERE employeeId=1 and ssn=encrypt('8012121122345', '홍길동');
--지역 정보 수정 쿼리
UPDATE region SET regionName='지역이름'
WHERE regionId=번호;
--부서 정보 수정 쿼리
UPDATE department SET departmentName='부서이름'
WHERE departmentId=번호;
--직위 정보 수정 쿼리
UPDATE position SET positionName='직위이름'
, minBasicPay=최소기본급
WHERE positionId=번호;
COMMIT;
8. 화면 구성
----------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-직원관리-
[직원추가] [직원검색]
직원수 : 1 명
직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여, 삭제 수정
--------------------------------------------------------------------------------------------------------
1, 홍길동, 1980-12-12, 양력, 010-123-1234, 개발부, 사원, 서울, 1,500,000, 1,000,000, 2,500,000, [삭제], [수정]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-직원관리-
[직원명단][직원검색]
이름* [박길동]
주민등록번호(YYMMDD-NNNNNNN)* [800110-1234567]
생년월일* [2010-10-10] <-달력 호출
양음력* o 양력 o 음력
전화번호(010-XXXX-XXXX)* [010-345-6789]
지역* [서울] <-선택 목록
부서* [개발부] <-선택 목록
직위* [사원] <- 선택 목록
기본급(최소 2000000원 이상)* [2000000] <-Ajax
수당* [100000]
[직원추가]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-직원관리-
[직원명단][직원추가]
검색기준 o사번 o주민번호 o이름 o지역 o부서 o직위
검색단어 [ ] [직원검색]
검색 직원수 : 1 명
직원 번호, 이름, 생년월일, 양음력, 전화번호, 부서명, 직위명, 지역명, 기본급, 수당, 급여, 삭제, 수정
------------------------------------------------------------------------------------------------
1, 홍길동, 1980-12-12, 양력, 010-123-1234, 개발부, 사원, 서울, 1,500,000, 1,000,000, 2,500,000, [삭제], [수정]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-지역관리-
지역번호 [ ] 지역명 [ ] [지역추가] [지역수정]
지역번호, 지역명, 삭제
-----------------
1, 서울, [삭제] <-비활성
2, 경기, [삭제]
3, 인천, [삭제]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-부서관리-
부서번호 [ ] 부서명 [ ] [부서추가] [부서수정]
부서번호, 부서명, 삭제
-----------------
1, 개발부, [삭제] <-비활성
2, 마케팅부, [삭제]
3, 영업부, [삭제]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-직위관리-
직위번호 [ 1] 직위명 [ 사원 ] 최소기본급 [ 1500000 ] [직위추가] [직위수정]
직위번호, 직위명, 최소기본급, 삭제
-------------------------
1, 사원, 1000000, [삭제] <-비활성
2, 대리, 2000000, [삭제]
3, 부장, 3000000, [삭제]
---------------------------------------------------
[직원관리] [지역관리] [부서관리] [직위관리]
---------------------------------------------------
-직원관리-
[직원명단][직원검색]
직원번호 [1001] <-readonly
이름* [박길동] <-readonly
주민등록번호(YYMMDD-NNNNNNN)* [8001101234567] <-재입력
생년월일* [2010-10-10] <-달력 호출
양음력* o 양력 o 음력
전화번호(010-XXXX-XXXX)* [새로운 전화번호]
지역* [서울] <-선택 목록
부서* [개발부] <-선택 목록
직위* [사원] <- 선택 목록
기본급(최소 2000000원 이상)* [2000000] <-Ajax
수당* [100000]
등급* o일반직원 o관리자
[직원수정]
로그인 화면 추가
아이디 [ ]
패스워드 [ ]
[로그인]
9. 프로그램 구성
//DBConn.java
//Employee.java -> 직원 정보 자료형 클래스
//Region.java -> 지역 정보 자료형 클래스
//Position.java -> 직위 정보 자료형 클래스
//Department.java -> 부서 정보 자료형 클래스
//EmployeeDAO.java -> JDBC 액션 클래스. 직원 정보 입출력 액션. 수정 메소드 추가
//RegionDAO.java -> JDBC 액션 클래스. 지역 정보 입출력 액션. 수정 메소드 추가
//PositionDAO.java -> JDBC 액션 클래스. 직위 정보 입출력 액션. 수정 메소드 추가
//DepartmentDAO.java -> JDBC 액션 클래스. 부서 정보 입출력 액션. 수정 메소드 추가
//Controller.java -> 서블릿 클래스. 요청 주소 분석 및 처리.
//Action.java -> 액션 처리. 액션 메소드 추가
//web.xml -> 서블릿 주소 등록. 확장자 .it 주소 등록.
//EmployeeMenu.jsp -> 메인 메뉴 페이지. 로그아웃 버튼.
//EmployeeList.jsp -> 직원 정보 출력 페이지. 삭제 버튼. 수정 버튼.
//EmployeeSearch.jsp -> 직원 정보 검색 페이지
//EmployeeInsertForm.jsp -> 직원 정보 입력 폼
//EmployeeUpdateForm.jsp -> 직원 정보 수정 폼
//RegionList.jsp -> 지역 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼. 수정 버튼.
//PositionList.jsp -> 직위 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼. 수정 버튼.
//DepartmentList.jsp -> 부서 정보 출력 페이지. 입력 폼 페이지. 삭제 버튼. 수정 버튼.
//PositionReceive.jsp -> Ajax 응답 페이지.
//LoginForm.jsp -> 관리자, 일반 직원 로그인 폼 페이지. 아이디(name), 패스워드(ssn) 입력.
//LogoutForm.jsp -> 로그아웃 메시지 출력 페이지.
//LoginFail.jsp -> 로그인 실패 메시지 출력 페이지.
//EmpList.jsp -> 일반 직원 전용 출력 페이지. 로그아웃 버튼. 입력, 삭제, 수정 기능 없음.
//Error.jsp -> 잘못된 요청 주소 메시지 출력 페이지.
10. 소스코드
//RegionDAO.java -> modify() 메소드 추가
package com.test;
import java.sql.*;
import java.util.*;
//데이터베이스 액션 클래스
public class RegionDAO {
//지역 명단 출력 메소드
public ArrayList<Region> regionList() {
ArrayList<Region> result = new ArrayList<Region>();
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBConn.getConnection();
//SELECT regionId, regionName, delCheck
// FROM regionView
// ORDER BY regionId;
String sql = "SELECT regionId, regionName, delCheck FROM regionView ORDER BY regionId";
pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next()) {
Region r = new Region();
r.setRegionId(rs.getString("regionId"));
r.setRegionName(rs.getString("regionName"));
r.setDelCheck(rs.getInt("delCheck"));
result.add(r);
}
rs.close();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt != null) {
pstmt.close();
}
}catch(Exception e){
}
DBConn.close();
}
return result;
}
//지역 명단 입력 메소드
public int add(Region region) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBConn.getConnection();
//INSERT INTO region (regionId, regionName)
// VALUES (regionSeq.nextval, ?)
String sql = "INSERT INTO region (regionId, regionName) VALUES (regionSeq.nextval, ?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, region.getRegionName());
result = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt != null) {
pstmt.close();
}
}catch(Exception e){
}
DBConn.close();
}
return result;
}
//지역 명단 삭제 메소드 -> 외부에서 지역번호를 전달 받아야 한다.
public int remove(String regionId) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "DELETE FROM region WHERE regionId = ?";
pstat = conn.prepareStatement(sql);
pstat.setString(1, regionId);
result = pstat.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(pstat!=null){
pstat.close();
}
}catch(Exception e){
}
DBConn.close();
}
return result;
}
//지역 명단 수정 메소드
public int modify(Region region) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBConn.getConnection();
//UPDATE region SET regionName=? WHERE regionId=?
String sql = "UPDATE region SET regionName=? WHERE regionId=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, region.getRegionName());
pstmt.setString(2, region.getRegionId());
result = pstmt.executeUpdate();
}catch(Exception e){
e.printStackTrace();
}finally{
try {
if (pstmt != null) {
pstmt.close();
}
}catch(Exception e){
}
DBConn.close();
}
return result;
}
}
//Action.java
package com.test;
import java.io.*;
import java.util.ArrayList;
import javax.servlet.*;
import javax.servlet.http.*;
//액션 전용 클래스 -> 메소드 단위로 액션 처리
public class Action {
/*
public String 메소드이름(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
return "요청주소.jsp";
//return "redirect:요청주소";
}
*/
public String regionList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 및 결과 출력
RegionDAO dao = new RegionDAO();
request.setAttribute("regionList", dao.regionList());
return "WEB-INF/source/RegionList.jsp";
}
public String regionInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionName = request.getParameter("regionName");
//데이터베이스 액션 -> add() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
Region r = new Region();
r.setRegionName(regionName);
dao.add(r);
return "redirect:RegionList.it";
}
public String regionDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionId = request.getParameter("regionId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
dao.remove(regionId);
return "redirect:RegionList.it";
}
public String regionUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionId = request.getParameter("regionId");
String regionName = request.getParameter("regionName");
//데이터베이스 액션 -> modify() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
Region r = new Region();
r.setRegionId(regionId);
r.setRegionName(regionName);
dao.modify(r);
return "redirect:RegionList.it";
}
}
//Controller.java
package com.test;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
private void doGetPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//요청 주소 분석 및 액션 메소드 호출
String uri = request.getRequestURI();
//->"http://localhost:8090/프로젝트이름/Sample.it"
Action action = new Action();
String result = "Error.jsp";
//요청주소별로 작성할 것.
if (uri.indexOf("RegionList.it") != -1) {
//액션 메소드 호출
//메소드 결과는 URI 주소 형태를 가지고 있다.
result = action.regionList(request, response);
}
if (uri.indexOf("RegionInsert.it") != -1) {
result = action.regionInsert(request, response);
}
if (uri.indexOf("RegionDelete.it") != -1) {
result = action.regionDelete(request, response);
}
if (uri.indexOf("RegionUpdate.it") != -1) {
result = action.regionUpdate(request, response);
}
//페이지 전환 -> forward(), sendRedirect() 메소드
if (result.indexOf("redirect:") != -1) {
//sendRedirect 요청
//->또 다른 서블릿 주소 요청
response.sendRedirect(result.substring(9));
} else {
//forward 요청
//->연관된 JSP 페이지 요청
RequestDispatcher dispatcher = request.getRequestDispatcher(result);
dispatcher.forward(request, response);
}
}
}
//RegionList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원 관리(Servlet MVC 버전)</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
//jQuery 버전
$(document).ready(function(){
//지역 추가 액션->지역명 빈 항목 검사
$("#btnAdd").click(function(){
if($("#regionName").val()==""){
alert("지역명을 입력하시오!");
} else {
//서브밋 액션 진행
$("#myForm").attr("action", "RegionInsert.it");
$("#myForm").submit();
}
});
//지역 수정 액션->지역번호(기존), 지역명(신규) 빈 항목 검사
$("#btnModify").click(function(){
if($("#regionId").val()==""
|| $("#regionName").val()==""){
alert("지역번호, 지역명을 입력하시오!");
} else {
var num = $("#regionId").val();
if(confirm(num+"번 지역을 수정할까요?")){
//서브밋 액션 진행
$("#myForm").attr("action", "RegionUpdate.it");
$("#myForm").submit();
}
}
});
//삭제 버튼 액션 추가
$(".btnDelete").click(function(){
var num = $(this).parent().parent().find("td:first").text();
if(confirm(num+"번 지역을 삭제할까요?")){
$(location).attr("href", "RegionDelete.it?regionId="+num);
}
});
});
</script>
</head>
<body>
<div>
<!-- 메뉴 영역 -->
<div class="title">
<h1>직원관리 (Servlet MVC 버전)</h1>
<!-- import 구문에서만 확장자 .jsp 유지한다. -->
<c:import url="EmployeeMenu.jsp"></c:import>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<h2>지역 관리</h2>
<!-- action="" 속성의 요청 주소를 jQuery에서 결정 -->
<form method="post" id="myForm">
<!-- name="", id="" 식별자는 테이블 컬럼명 사용 -->
지역번호* <input type="text" name="regionId" id="regionId">
지역명* <input type="text" name="regionName" id="regionName">
<!-- submit 액션을 jQuery에서 결정 -->
<input type="button" id="btnAdd" value="지역추가">
<input type="button" id="btnModify" value="지역수정">
<span id="errorMsg" style="color:red;"></span>
</form>
<table id="t01" style="font-size:10pt;">
<!-- <tr>은 제목 -->
<tr>
<th>지역 번호</th>
<th>지역명</th>
<th>삭제</th>
</tr>
<c:forEach var="r" items="${regionList}">
<tr>
<td>${r.regionId}</td>
<td>${r.regionName}</td>
<td><input type="button" value="삭제"
class="btnDelete"
${r.delCheck==0?"":"disabled=\"disabled\""} ></td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>
----------------------------------------
문제) 부서관리, 직위관리 Servlet MVC 버전 작성. 출력, 입력, 삭제, 수정 기능.
//PositionDAO.java -> modify() 메소드 추가
//DepartmentDAO.java -> modify() 메소드 추가
//Controller.java -> 액션 주소 추가
//Action.java -> 액션 메소드 추가
//DepartmentList.jsp -> 기존 JSP 코드 삭제, JSTL, EL 표현 추가
//PositionList.jsp -> 기존 JSP 코드 삭제, JSTL, EL 표현 추가
---------------------------------------
//PositionDAO.java -> modify() 메소드 추가
package com.test;
import java.util.*;
import java.sql.*;
public class PositionDAO {
public ArrayList<Position> positionList() {
ArrayList<Position> result = new ArrayList<Position>();
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "SELECT positionId, positionName, minBasicPay, delCheck FROM positionView ORDER BY positionId";
pstat = conn.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();
while (rs.next()) {
Position p = new Position();
p.setPositionId(rs.getString("positionId"));
p.setPositionName(rs.getString("positionName"));
p.setMinBasicPay(rs.getInt("minBasicPay"));
p.setDelCheck(rs.getInt("delCheck"));
result.add(p);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 직위 명단 입력 메소드
public int add(Position p) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "INSERT INTO position (positionId, positionName, minBasicPay) "
+ "VALUES ((SELECT NVL(MAX(positionId), 0)+1 FROM position), ?, ?)";
pstat = conn.prepareStatement(sql);
pstat.setString(1, p.getPositionName());
pstat.setInt(2, p.getMinBasicPay());
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 직위 명단 삭제 메소드 -> 외부에서 직위번호를 전달 받아야 한다.
public int remove(String positionId) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "DELETE FROM position WHERE positionId = ?";
pstat = conn.prepareStatement(sql);
pstat.setString(1, positionId);
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 직위 명단 수정 메소드
public int modify(Position p) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "UPDATE position SET positionName=?, minBasicPay=? WHERE positionId=?";
pstat = conn.prepareStatement(sql);
pstat.setString(1, p.getPositionName());
pstat.setInt(2, p.getMinBasicPay());
pstat.setString(3, p.getPositionId());
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
}
//DepartmentDAO.java -> modify() 메소드 추가
package com.test;
import java.util.*;
import java.sql.*;
//데이터베이스 액션 클래스
public class DepartmentDAO {
public ArrayList<Department> departmentList() {
ArrayList<Department> result = new ArrayList<Department>();
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "SELECT departmentId, departmentName, delCheck FROM departmentView ORDER BY departmentId";
pstat = conn.prepareStatement(sql);
ResultSet rs = pstat.executeQuery();
while (rs.next()) {
Department d = new Department();
d.setDepartmentId(rs.getString("departmentId"));
d.setDepartmentName(rs.getString("departmentName"));
d.setDelCheck(rs.getInt("delCheck"));
result.add(d);
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 부서 명단 입력 메소드
public int add(Department d) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "INSERT INTO department (departmentId, departmentName) VALUES ((SELECT NVL(MAX(departmentId),0)+1 FROM department), ?)";
pstat = conn.prepareStatement(sql);
pstat.setString(1, d.getDepartmentName());
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 부서 명단 삭제 메소드 -> 외부에서 부서번호를 전달 받아야 한다.
public int remove(String departmentId) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "DELETE FROM department WHERE departmentId = ?";
pstat = conn.prepareStatement(sql);
pstat.setString(1, departmentId);
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
// 부서 명단 수정 메소드
public int modify(Department d) {
int result = 0;
Connection conn = null;
PreparedStatement pstat = null;
try {
conn = DBConn.getConnection();
String sql = "UPDATE department SET departmentName=? WHERE departmentId=?";
pstat = conn.prepareStatement(sql);
pstat.setString(1, d.getDepartmentName());
pstat.setString(2, d.getDepartmentId());
result = pstat.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstat != null) {
pstat.close();
}
} catch (Exception e) {
}
DBConn.close();
}
return result;
}
}
//Controller.java -> 액션 주소 추가
package com.test;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import com.sun.corba.se.spi.orbutil.fsm.*;
public class Controller extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGetPost(req, resp);
}
private void doGetPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// 요청 주소 분석 및 액션 메소드 호출
String uri = request.getRequestURI();
// -> "http://localhost:8090/프로젝트이름/Sample.it"
Action action = new Action();
String result = "Error.jsp";
//요청 주소별로 작성할 것.
if (uri.indexOf("RegionList.it") != -1) {
// 액션 메소드 호출
// 메소드 결과는 URI 주소 형태를 가지고 있다.
result = action.regionList(request, response);
}
if (uri.indexOf("RegionInsert.it") != -1) {
result = action.regionInsert(request, response);
}
if (uri.indexOf("RegionDelete.it") != -1) {
result = action.regionDelete(request, response);
}
if (uri.indexOf("RegionUpdate.it") != -1) {
result = action.regionUpdate(request, response);
}
if (uri.indexOf("PositionList.it") != -1) {
// 액션 메소드 호출
// 메소드 결과는 URI 주소 형태를 가지고 있다.
result = action.positionList(request, response);
}
if (uri.indexOf("PositionInsert.it") != -1) {
result = action.positionInsert(request, response);
}
if (uri.indexOf("PositionDelete.it") != -1) {
result = action.positionDelete(request, response);
}
if (uri.indexOf("PositionUpdate.it") != -1) {
result = action.positionUpdate(request, response);
}
if (uri.indexOf("DepartmentList.it") != -1) {
// 액션 메소드 호출
// 메소드 결과는 URI 주소 형태를 가지고 있다.
result = action.departmentList(request, response);
}
if (uri.indexOf("DepartmentInsert.it") != -1) {
result = action.departmentInsert(request, response);
}
if (uri.indexOf("DepartmentDelete.it") != -1) {
result = action.departmentDelete(request, response);
}
if (uri.indexOf("DepartmentUpdate.it") != -1) {
result = action.departmentUpdate(request, response);
}
// 페이지 전환 -> forward(), sendRedirect() 메소드
if (result.indexOf("redirect:") != -1) {
// sendRedirect 요청
// -> 또 다른 서블릿 주소 요청
response.sendRedirect(result.substring(9));
} else {
// forward 요청
// -> 연관된 JSP 페이지 요청
RequestDispatcher dispatcher = request.getRequestDispatcher(result);
dispatcher.forward(request, response);
}
}
}
//Action.java -> 액션 메소드 추가
package com.test;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
//액션 전용 클래스 -> 메소드 단위로 액션 처리
public class Action {
/*
public String 메소드이름(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
return "요청주소";
//return "redirect:요청주소";
//->액션 전용일 경우 사용
}
*/
public String regionList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 및 결과 출력
RegionDAO dao = new RegionDAO();
request.setAttribute("list", dao.regionList());
return "WEB-INF/source/RegionList.jsp";
}
public String regionInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionName = request.getParameter("regionName");
//데이터베이스 액션 -> add() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
Region r = new Region();
r.setRegionName(regionName);
dao.add(r);
return "redirect:RegionList.it";
}
public String regionDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionId = request.getParameter("regionId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
dao.remove(regionId);
return "redirect:RegionList.it";
}
public String regionUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String regionName = request.getParameter("regionName");
String regionId = request.getParameter("regionId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
RegionDAO dao = new RegionDAO();
Region r = new Region();
r.setRegionName(regionName);
r.setRegionId(regionId);
dao.modify(r);
return "redirect:RegionList.it";
}
public String positionList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 및 결과 출력
PositionDAO dao = new PositionDAO();
request.setAttribute("list", dao.positionList());
return "WEB-INF/source/PositionList.jsp";
}
public String positionInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String positionName = request.getParameter("positionName");
String minBasicPay = request.getParameter("minBasicPay");
//데이터베이스 액션 -> add() 메소드 호출로 대체
PositionDAO dao = new PositionDAO();
Position p = new Position();
p.setPositionName(positionName);
p.setMinBasicPay(Integer.parseInt(minBasicPay));
dao.add(p);
return "redirect:PositionList.it";
}
public String positionDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String positionId = request.getParameter("positionId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
PositionDAO dao = new PositionDAO();
dao.remove(positionId);
return "redirect:PositionList.it";
}
public String positionUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String positionName = request.getParameter("positionName");
String positionId = request.getParameter("positionId");
String minBasicPay = request.getParameter("minBasicPay");
//데이터베이스 액션 -> add() 메소드 호출로 대체
PositionDAO dao = new PositionDAO();
Position p = new Position();
p.setPositionName(positionName);
p.setPositionId(positionId);
p.setMinBasicPay(Integer.parseInt(minBasicPay));
dao.modify(p);
return "redirect:PositionList.it";
}
public String departmentList(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 및 결과 출력
DepartmentDAO dao = new DepartmentDAO();
request.setAttribute("list", dao.departmentList());
return "WEB-INF/source/DepartmentList.jsp";
}
public String departmentInsert(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String departmentName = request.getParameter("departmentName");
//데이터베이스 액션 -> add() 메소드 호출로 대체
DepartmentDAO dao = new DepartmentDAO();
Department d = new Department();
d.setDepartmentName(departmentName);
dao.add(d);
return "redirect:DepartmentList.it";
}
public String departmentDelete(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String departmentId = request.getParameter("departmentId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
DepartmentDAO dao = new DepartmentDAO();
dao.remove(departmentId);
return "redirect:DepartmentList.it";
}
public String departmentUpdate(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//액션 전용
//데이터 수신(한글 인코딩 추가)
request.setCharacterEncoding("UTF-8");
String departmentName = request.getParameter("departmentName");
String departmentId = request.getParameter("departmentId");
//데이터베이스 액션 -> add() 메소드 호출로 대체
DepartmentDAO dao = new DepartmentDAO();
Department d = new Department();
d.setDepartmentName(departmentName);
d.setDepartmentId(departmentId);
dao.modify(d);
return "redirect:DepartmentList.it";
}
}
//DepartmentList.jsp -> 기존 JSP 코드 삭제, JSTL, EL 표현 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원 관리(Servlet MVC 버전)</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
//부서 입력 액션 -> 부서명 빈 항목 검사
$("#btnAdd").click(function(){
if($("#departmentName").val()=="") {
$("#errorMsg").html("부서명을 입력하세요.");
} else {
$("#myForm").attr("action", "DepartmentInsert.it");
$("#myForm").submit();
}
});
//부서 수정 액션 -> 부서번호(기존), 부서명(신규) 빈 항목 검사
$("#btnModify").click(function(){
if($("#departmentName").val()=="" || $("#departmentId").val()=="") {
$("#errorMsg").html("부서번호, 부서명을 입력하세요.");
} else {
$("#myForm").attr("action", "DepartmentUpdate.it");
$("#myForm").submit();
}
});
//삭제버튼 액션 추가
$(".btnDelete").click(function(){
var text = $(this).parent().parent().find("td:first").text();
if(confirm(text+"번 부서를 삭제할까요?")){
/* 요청 주소에서 .jsp 사용 금지 */
$(location).attr("href","DepartmentDelete.it?departmentId="+text);
}
});
});
</script>
</head>
<body>
<div>
<!-- 메뉴 영역 -->
<div class="title">
<h1>직원관리</h1>
<c:import url="EmployeeMenu.jsp"></c:import>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<h2>부서 관리</h2>
<form method="post" id="myForm">
부서번호* <input type="text" name="departmentId" id="departmentId">
부서명* <input type="text" name="departmentName" id="departmentName">
<input type="button" id="btnAdd" value="부서추가">
<input type="button" id="btnModify" value="부서수정">
<span id="errorMsg" style="color:red;"></span>
</form>
<table id="t01" style="font-size:10pt;">
<!-- <tr>은 제목 -->
<tr>
<th>부서 번호</th>
<th>부서명</th>
<th>삭제</th>
</tr>
<c:forEach var="d" items="${list}">
<tr>
<td>${d.departmentId}</td>
<td>${d.departmentName}</td>
<td><input type="button" value="삭제" class="btnDelete" ${d.delCheck==0?"":"disabled=\"disabled\""}></td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>
//PositionList.jsp -> 기존 JSP 코드 삭제, JSTL, EL 표현 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>직원 관리(Servlet MVC 버전)</title>
<link rel="stylesheet" type="text/css" href="TableStyle.css">
<link rel="stylesheet" type="text/css" href="DivStyle.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script type="text/javascript">
$(function() {
//직위 추가 액션 -> 직위명, 최소기본급 빈 항목 검사
$("#btnAdd").click(function(){
if($("#positionName").val()==""
|| $("#minBasicPay").val()=="") {
$("#errorMsg").html("직위명, 최소기본급을 입력하세요.");
} else {
$("#myForm").attr("action", "PositionInsert.it");
$("#myForm").submit();
}
});
//직위 수정 액션 -> 직위번호(기존), 직위명(신규), 최소기본급 빈 항목 검사
$("#btnModify").click(function(){
if($("#positionName").val()==""
|| $("#positionId").val()==""
|| $("#minBasicPay").val()=="") {
$("#errorMsg").html("직위번호, 직위명, 최소기본급을 입력하세요.");
} else {
$("#myForm").attr("action", "PositionUpdate.it");
$("#myForm").submit();
}
});
//삭제버튼 액션 추가
$(".btnDelete").click(function(){
var text = $(this).parent().parent().find("td:first").text();
if(confirm(text+"번 직위 삭제할까요?")){
/* 요청 주소에서 .jsp 사용 금지 */
$(location).attr("href","PositionDelete.it?positionId="+text);
}
});
});
</script>
</head>
<body>
<div>
<!-- 메뉴 영역 -->
<div class="title">
<h1>직원관리</h1>
<c:import url="EmployeeMenu.jsp"></c:import>
</div>
<!-- 콘텐츠 영역 -->
<div class="main">
<h2>직위 관리</h2>
<form method="post" id="myForm">
직위번호* <input type="text" name="positionId" id="positionId">
직위명* <input type="text" name="positionName" id="positionName">
최소기본급*<input type="text" name="minBasicPay" id="minBasicPay">
<input type="button" id="btnAdd" value="직위추가">
<input type="button" id="btnModify" value="직위수정">
<span id="errorMsg" style="color:red;"></span>
</form>
<table id="t01" style="font-size:10pt;">
<!-- <tr>은 제목 -->
<tr>
<th>직위 번호</th>
<th>직위명</th>
<th>최소기본급</th>
<th>삭제</th>
</tr>
<c:forEach var="p" items="${list}">
<tr>
<td>${p.positionId}</td>
<td>${p.positionName}</td>
<td><fmt:formatNumber value="${p.minBasicPay}" groupingUsed="true"></fmt:formatNumber></td>
<td><input type="button" value="삭제" class="btnDelete" ${p.delCheck==0?"":"disabled=\"disabled\""}></td>
</tr>
</c:forEach>
</table>
</div>
</div>
</body>
</html>
-----------------------------------------