Notice
Recent Posts
Recent Comments
Link
Everything has an expiration date
[SpringMVC] 20240115 [프로그램 소스] 본문
[Spring MVC]/Program source (Spring MVC)
[SpringMVC] 20240115 [프로그램 소스]
Jelly-fish 2024. 1. 15. 15:28SpringMVCStudy
[ filter 적용하기 ]
web.xml 에, `CharacterEncodingFilter` 필터를 등록한다.
<!-- check~!!! -->
<!-- 필터 등록 → 인코딩 필터 등록 → CharacterEncodingFilter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/</url-pattern> <!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
</filter-mapping>
▶ filter 객체 (`CharcterEncodingFilter`) 가져오기
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
▶ filter 설정 `<init-param>` - UTF-8로 설정.
<!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
▶ 클라이언트가 어떤 Url 을 요청했을 때 필터를 적용시킬 것인지 설정하기. (mapping)
(`/*`) → 어떤 요청(request)이 들어오든 모두 필터를 적용시키도록 한다.
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
[ View 페이지에 보여질 텍스트에, format 형식 지정하기 ]
① View 페이지에서 `taglib` 을 통해 CDN 방식으로 format 을 불러온다.
EmployeeList.jsp
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
② View 페이지에서 특정 format 형식을 지정할 텍스트에 `<fmt: >` 태그를 작성한다.
- `groupingUsed="true"` : 숫자 세 자리당 쉼표를 붙여주는 옵션 (구두점) 속성이다. (10,000)
원래 표시해야 했던 값인 `${employee.basicPay }` 를
`<fmt:formatNumber>` 태그의 value 속성으로 넣어준다.
→ `<fmt:formatNumber value="${employee.basicPay }">`
EmployeeList.jsp
<%-- <td>${employee.basicPay }</td> --%>
<td>
<fmt:formatNumber value="${employee.basicPay }"
groupingUsed="true"></fmt:formatNumber>
</td>
▶ format 지정 전 `4000000` (사백 만 원)
<td>${employee.basicPay }</td>
▶ format 지정 후 `4,000,000` (사백 만 원, 숫자 콤마가 세 자리 단위로 들어간 것을 확인.)
<td>
<fmt:formatNumber value="${employee.basicPay }"
groupingUsed="true"></fmt:formatNumber>
</td>
Mvc04
#11. RegionDAO.java
/*
* #11. EmployeeDAO.java
* - 데이터베이스 액션 처리 클래스
* - 지역 데이터 CRUD 액션
* (Create / Read / Update / Delete)
* - Connection 객체에 대한 의존성 주입을 위한 준비
* -> 인터페이스 형태의 속성 구성(dataSource)
* -> Setter 구성
*/
package com.test.mvc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.sql.DataSource;
public class RegionDAO implements IRegionDAO
{
DataSource dataSource;
public void setdataSource(DataSource dataSource)
{
this.dataSource = dataSource;
}
@Override
public ArrayList<Region> list() throws SQLException
{
Connection conn = dataSource.getConnection();
ArrayList<Region> lists = new ArrayList<Region>();
String sql = "SELECT REGIONID, REGIONNAME, DELCHECK "
+ " FROM REGIONVIEW "
+ " ORDER BY REGIONID";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
Region region = new Region();
region.setRegionId(rs.getString("REGIONID"));
region.setRegionName(rs.getString("REGIONNAME"));
region.setDelCheck(rs.getInt("DELCHECK"));
lists.add(region);
}
rs.close();
pstmt.close();
conn.close();
return lists;
}
@Override
public int add(Region region) throws SQLException
{
int result = 0;
Connection conn = dataSource.getConnection();
String sql = "INSERT INTO REGION(REGIONID, REGIONNAME) "
+ " VALUES(REGIONSEQ.NEXTVAL, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, region.getRegionName());
result = pstmt.executeUpdate();
pstmt.close();
conn.close();
return result;
}
@Override
public int remove(String regionId) throws SQLException
{
int result = 0;
Connection conn = dataSource.getConnection();
String sql = "DELETE "
+ " FROM REGION "
+ " WHERE REGIONID = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, Integer.parseInt(regionId));
result = pstmt.executeUpdate();
pstmt.close();
conn.close();
return result;
}
@Override
public int modify(Region region) throws SQLException
{
int result = 0;
Connection conn = dataSource.getConnection();
String sql = "UPDATE REGION"
+ " SET REGIONNAME=?"
+ " WHERE REGIONID=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, region.getRegionName());
pstmt.setInt(2, Integer.parseInt(region.getRegionId()));
result = pstmt.executeUpdate();
return result;
}
}
#12. PositionDAO.java
package com.test.mvc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.sql.DataSource;
public class PositionDAO implements IPositionDAO
{
DataSource datasource;
public void setDatasource(DataSource datasource)
{
this.datasource = datasource;
}
@Override
public ArrayList<Position> list() throws SQLException
{
Connection conn = datasource.getConnection();
ArrayList<Position> lists = new ArrayList<Position>();
String sql = "SELECT POSITIONID, POSITIONNAME, MINBASICPAY, DELCHECK "
+ " FROM POSITIONVIEW"
+ " ORDER BY POSITIONID";
PreparedStatement pstmt = conn.prepareStatement(sql);
ResultSet rs = pstmt.executeQuery();
while(rs.next())
{
Position position = new Position();
position.setPositionId(rs.getString("POSITIONID"));
position.setPositionName(rs.getString("POSITIONNAME"));
position.setMinBasicPay(rs.getInt("MINBASICPAY"));
position.setDelCheck(rs.getInt("DELCHECK"));
lists.add(position);
}
rs.close();
pstmt.close();
conn.close();
return lists;
}
@Override
public int add(Position position) throws SQLException
{
int result = 0;
Connection conn = datasource.getConnection();
String sql = "INSERT INTO POSITION(POSITIONID, POSITIONNAME, MINBASICPAY) "
+ " VALUES(POSITIONSEQ.NEXTVAL, ?, ?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, position.getPositionName());
pstmt.setInt(2, position.getMinBasicPay());
result = pstmt.executeUpdate();
pstmt.close();
conn.close();
return result;
}
@Override
public int remove(String positionId) throws SQLException
{
int result = 0;
Connection conn = datasource.getConnection();
String sql = "DELETE "
+ " FROM POSITION"
+ " WHERE POSITIONID=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, Integer.parseInt(positionId));
result = pstmt.executeUpdate();
pstmt.close();
conn.close();
return result;
}
@Override
public int modify(Position position) throws SQLException
{
int result = 0;
Connection conn = datasource.getConnection();
String sql = "UPDATE POSITION "
+ " SET POSITIONNAME=?, MINBASICPAY=? "
+ " WHERE POSITIONID=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, position.getPositionName());
pstmt.setInt(2, position.getMinBasicPay());
pstmt.setInt(3, Integer.parseInt(position.getPositionId()));
result = pstmt.executeUpdate();
pstmt.close();
conn.close();
return result;
}
}
#13. EmployeeMenu.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeMenu.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/menuStyle.css"> <!-- menuStyle이라는 css만들기로함 -->
</head>
<body>
<!------------------------------
#13. EmployeeMenu.jsp
- 메인 메뉴 페이지 구성
- 로그아웃 기능 포함
------------------------------->
<div id="menu">
<ul>
<li>
<a href="" class="menu">직원 관리</a>
</li>
<li>
<a href="" class="menu">지역 관리</a>
</li>
<li>
<a href="" class="menu">부서 관리</a>
</li>
<li>
<a href="" class="menu">직위 관리</a>
</li>
<li>
<a href="" class="menu">로그 아웃</a>
</li>
</ul>
</div>
</body>
</html>
#14. menuStyle.css
@charset "UTF-8";
/*================================
#14. menuStyle.css
- 메뉴 스타일 구성
================================*/
ul
{
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
}
li
{
width: 20%;
float: left;
}
a.menu:link, a.menu:visited
{
display: block;
font-weight: bold;
color: #ffffff;
background-color: #008000;
text-align: center;
padding: 4px;
text-decoration: none;
text-transform: uppercase;
height: 30px;
font-size: 14pt;
}
a.menu:hover, a.menu:active
{
background-color: #ffffff;
color: #008000;
border: 2px solid #008000;
border-radius: 5px;
height: 26px;
}
#15. EmployeeList.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeList.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<!-- view안에 넣어버리면 경로가 달라질 수도 있으니 cp 경로 추가해 준다. -->
</head>
<body>
<!--===========================================================
#15. EmployeeList.jsp
- 직원 리스트 출력 페이지
- 관리자가 접근하는 직원 데이터 출력 페이지
(일반 직원이 접근하는 직원 데이터 출력 페이지는
EmpList.jsp 로 구성할 예정)
============================================================-->
<div>
<!-- 메뉴 영역 -->
<div>
<c:import url="EmployeeMenu.jsp"></c:import>
</div>
<!-- 콘텐츠 영역 -->
<div id="content">
<h1>[ 직원 관리 (관리자 전용)]</h1>
<hr />
<div>
<form>
<input type="button" value="직원 추가" class="btn" />
</form>
</div>
<br /><br />
<!------------------------------------------------------
EMPLOYEEID NAME SSN BIRTHDAY LUNAR LUNARNAME TELEPHONE
DEPARTMENTID DEPARTMENTNAME POSITIONID POSITIONNAME
REGIONID REGIONNAME BASICPAY EXTRAPAY PAY GRADE
------------------------------------------------------->
<table id="customers" class="table">
<tr>
<!-- 항목 15 EA -->
<th>번호</th>
<th>이름</th>
<th>주민번호</th>
<th>생년월일</th>
<th>양음력</th>
<th>전화번호</th>
<th>지역</th>
<th>부서</th>
<th>직위</th>
<th>기본급</th>
<th>수당</th>
<th>급여</th>
<th>등급</th>
<th>수정</th>
<th>삭제</th>
</tr>
<c:forEach var="employee" items="${employeeList }">
<tr>
<td>${employee.employeeId }</td>
<td>${employee.name }</td>
<td>${employee.ssn }-*******</td>
<td>${employee.birthday }</td>
<td>${employee.lunarName }</td>
<td>${employee.telephone }</td>
<td>${employee.regionName }</td>
<td>${employee.departmentName }</td>
<td>${employee.positionName }</td>
<%-- <td>${employee.basicPay }</td> --%>
<!-- groupingUsed=true : 세 자리 당 쉼표. 구두점. (10,000) -->
<td>
<fmt:formatNumber value="${employee.basicPay }"
groupingUsed="true"></fmt:formatNumber>
</td>
<%-- <td>${employee.extraPay }</td> --%>
<td>
<fmt:formatNumber value="${employee.extraPay }"
groupingUsed="true"></fmt:formatNumber>
</td>
<td>${employee.pay }</td>
<td>
<fmt:formatNumber value="${employee.pay }"
groupingUsed="true"></fmt:formatNumber>
</td>
<%-- <td>${employee.grade }</td> --%>
<td>
${employee.grade == 0 ? "관리자" : "일반사원"}
</td>
<td><button type="button" class="btn">수정</button></td>
<td><button type="button" class="btn">삭제</button></td>
</tr>
</c:forEach>
<!--
<tr>
<td>1</td>
<td>고길동</td>
<td>620527</td>
<td>1962-05-27</td>
<td>양력</td>
<td>010-1123-3344</td>
<td>서울</td>
<td>개발부</td>
<td>사원</td>
<td>1,500,500</td>
<td>1,500,500</td>
<td>3,000,000</td>
<td>관리자</td>
<td><button type="button" class="btn">수정</button></td>
<td><button type="button" class="btn">삭제</button></td>
</tr>
<tr>
<td>2</td>
<td>도우너</td>
<td>861227</td>
<td>1986-12-27</td>
<td>음력</td>
<td>010-3306-4499</td>
<td>서울</td>
<td>개발부</td>
<td>사원</td>
<td>1,500,500</td>
<td>1,500,500</td>
<td>3,000,000</td>
<td>일반사원</td>
<td><button type="button" class="btn">수정</button></td>
<td><button type="button" class="btn">삭제</button></td>
</tr>
-->
</table>
</div>
회사 소개 및 어플리케이션 소개 영역
<div id="footer">
</div>
</div>
</body>
</html>
① EmployeeController.java 컨트롤러에서 전달한 `employeeList`를 수신
[EmployeeController.java]
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
// 액션 코드
ModelAndView mav = new ModelAndView();
ArrayList<Employee> employeeList = new ArrayList<Employee>();
try
{
employeeList = dao.list();
mav.addObject("employeeList", employeeList);
mav.setViewName("/WEB-INF/view/EmployeeList.jsp");
} catch (Exception e)
{
System.out.println(e.toString());
}
return mav;
}
② c 태그 `<c:forEach var="employee" items="${employeeList}">` 를 이용하여
화면에 레코드를 하나씩 반복하여 보여준다.
<c:forEach var="employee" items="${employeeList }">
<tr>
<td>${employee.employeeId }</td>
<td>${employee.name }</td>
.... (생략)
</tr>
</c:forEach>
#16. main.css
@charset "UTF-8";
/* main.css */
*
{
font-family: 맑은 고딕;
color: #343;
}
body, p, div, span, input, table, th, td, select
{
font-size: 18px;
}
.control
{
border: 1px solid gray;
border-radius: 3px;
}
.table
{
border-collapse: collapse;
width: 100%;
}
.table th, .table td
{
border: 1px solid gray;
border-left: 0px;
border-right: 0px;
padding: 3px;
line-height: 150%;
}
.table th
{
font-weight: bold;
background-color: #EEE;
}
.btn
{
font-weight: bold;
}
.btn:hover
{
color: white;
background-color: #787;
}
.btn:active
{
color: orange;
}
#17. EmployeeListController.java
/*===================================================
#17. EmployeeListController.java
- 사용자 정의 컨트롤러 클래스
- 회원 리스트 페이지 요청에 대한 액션 처리.
- DAO 객체에 대한 의존성 주입(DI)를 위한 준비
→ 인터페이스 형태의 자료형을 속성으로 구성
→ setter 메소드 준비
=====================================================*/
package com.test.mvc;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
//※ Spring 의 『Controller』 인터페이스를 구현하는 방법을 통해
//사용자 정의 컨트롤러 클래스를 구성한다.
//cf. Controller Annotation 활용
public class EmployeeListController implements Controller
{
// 주요 속성 구성
// → 인터페이스 형태의 자료형을 속성으로 구성
private IEmployeeDAO dao;
// setter 구성
public void setDao(IEmployeeDAO dao)
{
this.dao = dao;
}
// 요청을 핸들링 하겠다는 메소드.
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
// 액션 코드
ModelAndView mav = new ModelAndView();
ArrayList<Employee> employeeList = new ArrayList<Employee>();
try
{
employeeList = dao.list();
mav.addObject("employeeList", employeeList);
mav.setViewName("/WEB-INF/view/EmployeeList.jsp");
} catch (Exception e)
{
System.out.println(e.toString());
}
return mav;
}
}
#18. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>Mvc00</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- #18. web.xml -->
<!-- ※ Spring MVC Framework 등록 -->
<!-- → Front Controller 등록 -->
<!-- → DispatcherServlet 객체 등록 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<!-- check~!!! -->
<!-- 필터 등록 → 인코딩 필터 등록 → CharacterEncodingFilter -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 필터 설정 → 필터 객체에 파라미터 초기값 설정 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/</url-pattern> <!-- 어떤 요청이든 다 필터가 작용하도록 처리 『/』 -->
</filter-mapping>
</web-app>
#19. dispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="org.springframework.samples.petclinic.web" />
<!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 -->
<!-- - 『name=""』 속성에 매핑 주소를 등록한다. -->
<!-- 이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. -->
<!-- - 『class=""』 속성은 -->
<!-- Controller 객체의 패키지 경로가 포함된 클래스 이름을 등록한다. -->
<!-- DataSource 등록 → SimpleDriverDataSource -->
<bean id="localDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@211.238.142.170:1521:xe"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean id="remoteDataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@211.238.142.171:1521:xe"></property>
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<!-- DAO 등록 -->
<bean id="employeeDAO" class="com.test.mvc.EmployeeDAO">
<property name="dataSource" ref="localDataSource"></property>
</bean>
<!-- Employee 관련 Controller 등록 -->
<bean name="/employeelist.action" class="com.test.mvc.EmployeeListController">
<property name="dao" ref="employeeDAO"></property>
</bean>
<bean name="/employeeinsertform.action" class="com.test.mvc.EmployeeInsertFormController">
<property name="dao" ref="employeeDAO"></property>
</bean>
<bean id="departmentDAO" class="com.test.mvc.DepartmentDAO">
<property name="dataSource">
<ref bean="localDataSource" />
</property>
</bean>
<bean id="regionDAO" class="com.test.mvc.RegionDAO">
<property name="dataSource">
<ref bean="localDataSource" />
</property>
</bean>
</beans>
#20. employeelist.action - 비어있는 파일
#21. EmployeeInsertForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EmployeeInsertForm.jsp</title>
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/main.css">
<link rel="stylesheet" type="text/css" href="<%=cp %>/css/jquery-ui.css">
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
<script type="text/javascript" src="<%=cp %>/js/jquery-ui.js"></script>
<script type="text/javascript">
// 입력창에 커서를 올렸을 때, 캘린더가 나오는 기능
// → 『Datepicker』
// $();
// jquery();
// $(document).ready();
$(document).ready(function()
{
// jQuery-UI 캘린더를 불러오는 함수 처리(datepicker())
// 【『캘린더 값을 적용할 textbox ID』.datepicker()】
$("#birthday").datepicker(
{
dateFormat: "yy-mm-dd"
, changeMonth: true
, changeYear: true
// List로 쫙 뿌려준다~!!!
// 연 / 월 ~!!!
});
});
</script>
</head>
<body>
<!--==================================
#21. EmployeeInsertForm.jsp
- 직원 데이터 입력 페이지
- 관리자만 접근 허용
=====================================-->
<div>
<!-- 메뉴 영역 -->
<div>
<c:import url="EmployeeMenu.jsp"></c:import>
</div>
<!-- 콘텐츠 영역 -->
<div id="content">
<h1>[ 직원 추가 ]</h1>
<hr>
<form action="employeeinsert.action" method="post" id="employeeForm">
<table>
<tr>
<th>이름</th>
<td>
<input type="text" id="name" name="name" placeholder="이름">
</td>
</tr>
<tr>
<th>주민번호</th>
<td>
<input type="text" id="ssn1" name="ssn1" style="width: 100px;"
placeholder="앞 6자리">
<input type="password" id="ssn2" name="ssn2" style="width: 110px;"
placeholder="뒤 7자리">
</td>
</tr>
<tr>
<th>생년월일</th>
<td>
<input type="text" id="birthday" name="birthday" placeholder="생년월일">
</td>
</tr>
<tr>
<th>양/음력</th>
<td>
<input type="radio" value="0" name="lunar" id="lunar0" checked="checked">
<label for="lunar0">양력</label>
<input type="radio" value="1" name="lunar" id="lunar1">
<label for="lunar1">음력</label>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<input type="tel" id="telephone" name="telephone" placeholder="전화번호">
</td>
</tr>
<tr>
<th>지역</th>
<td>
<select id="regionId" name="regionId">
<c:forEach var="region" items="${regionList }">
<option value="${region.regionId }">${region.regionName }</option>
</c:forEach>
<%-- ★ ID 를 뿌렸어야지!!! ★
<c:forEach var="i" begin="0" end="${regionList.size()-1 }" step="1">
<option value="${i+1 }">${regionList[i].regionName }</option>
</c:forEach>
--%>
<!--
<option value="1">관악구</option>
<option value="2">마포구</option>
<option value="3">은평구</option>
<option value="4">도봉구</option>
-->
</select>
</td>
</tr>
<tr>
<th>부서</th>
<td>
<select id="departmentId" name="departmentId">
<c:forEach var="department" items="${departmentList }">
<option value="${department.departmentId }">${department.departmentName }</option>
</c:forEach>
<%-- ★ ID 를 뿌렸어야지!!! ★
<c:forEach var="i" begin="0" end="${departmentList.size()-1 }" step="1">
<option value="${i+1 }">${departmentList[i].departmentName }</option>
</c:forEach>
--%>
<!--
<option value="1">축구부</option>
<option value="2">야구부</option>
<option value="3">수영부</option>
<option value="4">원예부</option>
<option value="5">독서부</option>
-->
</select>
</td>
</tr>
<tr>
<th>직위</th>
<td>
<select id="positionId" name="positionId">
<c:forEach var="position" items="${positionList }">
<option value="${position.positionId }">${position.positionName }</option>
</c:forEach>
<%-- ★ ID 를 뿌렸어야지!!! ★
<c:forEach var="i" begin="0" end="${positionList.size()-1 }" step="1">
<option value="${i+1 }">${positionList[i].positionName }</option>
</c:forEach>
--%>
<!--
<option value="1">팀장</option>
<option value="2">기술고문</option>
<option value="3">팀원</option>
<option value="4">탈영병</option>
<option value="5">엑스맨</option>
-->
</select>
</td>
</tr>
<tr>
<th>기본급</th>
<td>
<input type="text" id="basicPay" name="basicPay">
(최소 기본급 <span id="minBasicPay"
style="color: red; font-weight: bold;">0</span>원)
</td>
</tr>
<tr>
<th>수당</th>
<td>
<input type="text" id="extraPay" name="extraPay">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<br><br>
<button type="button" class="btn" id="submitBtn">직원 추가</button>
<button type="button" class="btn" id="listBtn">직원 리스트</button>
</td>
</tr>
</table>
</form>
</div>
<!-- 회사 소개 및 어플리케이션 소개 영역 -->
<div id="footer">
</div>
</div>
</body>
</html>
#22. EmployeeInsertFormController.java
/*==========================================================
#22. EmployeeInsertFormController.java
- 사용자 정의 컨트롤러 클래스
- 회원 데이터 입력 폼 페이지 요청에 대한 액션 처리.
- DAO 객체에 대한 의존성 주입(DI)를 위한 준비
→ 인터페이스 형태의 자료형을 속성으로 구성
→ setter 메소드 준비
============================================================*/
package com.test.mvc;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
// ※ Spring 의 『Controller』 인터페이스를 구현하는 방법을 통해
// 사용자 정의 컨트롤러 클래스를 구성한다.
// cf. Controller Annotation 활용
public class EmployeeInsertFormController implements Controller
{
// 인터페이스 형태의 속성 구성
private IEmployeeDAO dao;
// setter 구성
public void setDao(IEmployeeDAO dao)
{
this.dao = dao;
}
//***********************************************************************
// IEmployeeDAO 를 implements 하는 EmployeeDAO 에
// 부서, 직위, 지역 리스트를 반환하는 메소드가 없다면
// 총 3개 (Department, Position, Region) 의 객체를 설정해야 했을 것이다.
//***********************************************************************
// 요청을 핸들링 하겠다는 메소드.
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception
{
// 액션 코드
ModelAndView mav = new ModelAndView();
ArrayList<Region> regionList = new ArrayList<Region>();
ArrayList<Department> departmentList = new ArrayList<Department>();
ArrayList<Position> positionList = new ArrayList<Position>();
try
{
regionList = dao.regionList();
departmentList = dao.departmentList();
positionList = dao.positionList();
mav.addObject("regionList", regionList);
mav.addObject("departmentList", departmentList);
mav.addObject("positionList", positionList);
mav.setViewName("WEB-INF/view/EmployeeInsertForm.jsp");
} catch (Exception e)
{
System.out.println(e.toString());
}
return mav;
}
}
공유폴더 - `jQueryUi` 다운로드 → 각각의 파일들 WebContent에 복사 붙여넣기.
EmployeeInsertForm.jsp (javascript 단 `<script>`)
$(document).ready(function()
{
// jQuery-UI 캘린더를 불러오는 함수 처리(datepicker())
// 【『캘린더 값을 적용할 textbox ID』.datepicker()】
$("#birthday").datepicker(
{
dateFormat: "yy-mm-dd"
, changeMonth: true
, changeYear: true
// List로 쫙 뿌려준다~!!!
// 연 / 월 ~!!!
});
});
'[Spring MVC] > Program source (Spring MVC)' 카테고리의 다른 글
★[SpringMVC] 20240118 [프로그램 소스] - 직원관리 웹 페이지 (1) | 2024.01.21 |
---|---|
[SpringMVC] 20240117 [프로그램 소스] (0) | 2024.01.17 |
[SpringMVC] 20240116 [프로그램 소스] (2) | 2024.01.16 |
[SpringMVC] 20240112 [프로그램 소스] (0) | 2024.01.12 |
[SpringMVC] 20240111 [프로그램 소스] (1) | 2024.01.11 |