-------------------------------------
상담 게시판 (Struts2, iBatis 버전)
1. 웹 상에서 글쓰기, 글보기를 할 수 있는 프로그램.
2. 회원, 비회원 글쓰기 가능. 회원 댓글 쓰기. 회원 가입. 회원 로그인, 로그아웃.
3. 관리자 관리 기능. 관리자 답변글 쓰기.
4. 프로젝트 생성 (ConsultationStruts2_20121220)
ConsultationStruts2_20121220.war
-------------------------------------
--상담게시판 테이블 (글번호, 글쓴이이름, 패스워드, 제목, 내용, 작성일)
CREATE TABLE consultation (
sid NUMBER --PK 지정. 시퀀스 지원.
,name NVARCHAR2(20)
,pw VARCHAR2(20) --암호화 지원
,title NVARCHAR2(100)
,content NVARCHAR2(2000)
,wdate DATE --자동 입력. 시스템 현재 날짜.
);
ALTER TABLE consultation
ADD CONSTRAINT consultation_sid_pk PRIMARY KEY(sid);
CREATE SEQUENCE consultationSeq;
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,'관리자'
,encrypt('1234', '관리자') --사용자 정의 암호화 함수
,'상담 게시판이 오픈되었습니다'
,'많은 이용 바랍니다'
,SYSDATE);
COMMIT;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC;
--SID 기준 검색 쿼리
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=1;
SELECT sid, title, content
FROM consultation
WHERE sid=1 AND name='관리자' AND pw=encrypt('1234', '관리자');
--이름 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
--제목 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(title) LIKE '%'||LOWER('html')||'%'
ORDER BY sid DESC;
--내용 기준 검색 (부분 검색 가능하도록 할 것. 대소문자 구분 하지 않도록 할 것)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER(content) LIKE '%'||LOWER('html')||'%'
ORDER BY sid DESC;
--페이지 처리 쿼리문 (총 게시물 카운트)
SELECT COUNT(*) AS count FROM consultation;
--페이지 처리 쿼리문 (특정 페이지 게시물 읽어오기. 시작번호, 끝번호 필요)
--> 한 페이지당 10개의 게시물 처리
--> 1페이지 게시물은 시작번호 1 ~ 끝번호 10
--> 2페이지 게시물은 시작번호 11 ~ 끝번호 20
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC) data)
WHERE rnum>=1 AND rnum<=10;
CREATE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC) data);
SELECT *
FROM pageListView
WHERE rnum>=1 AND rnum<=10;
-----------------------------------------------------------
--관리자 답변글 전용 테이블
CREATE TABLE consultReply (
rid NUMBER --PK
,name NVARCHAR2(20) --관리자 전용
--,pw VARCHAR2(20) --관리자 전용이므로 패스워드 저장 안함
,title NVARCHAR2(100)
,content NVARCHAR2(2000)
,wdate DATE
);
ALTER TABLE consultReply
ADD CONSTRAINT consultReply_rid_pk PRIMARY KEY(rid);
CREATE SEQUENCE consultReplySeq;
--답변글과 부모글 연관성 지정 필요
--> 부모글 테이블에 답변글 번호를 저장하는 컬럼 추가 및 FK 지정
ALTER TABLE consultation
ADD rid NUMBER;
ALTER TABLE consultation
ADD CONSTRAINT consultation_rid_fk FOREIGN KEY (rid)
REFERENCES consultReply(rid);
--답변글 추가 쿼리
INSERT INTO consultReply (rid, name, title, content, wdate)
VALUES (consultReplySeq.nextval, '관리자', '예약 확인했습니다.'
,'내일 오전 중으로 연락 드리겠습니다.', SYSDATE);
COMMIT;
--특정 부모글에 답변글 번호를 연결하는 쿼리
UPDATE consultation
SET rid=consultReplySeq.currval
WHERE sid=49;
COMMIT;
--답변글 번호도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid --답변글 번호 추가
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid --답변글 번호 추가
FROM consultation
WHERE sid=1;
--답변글 번호도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid --답변글 번호 추가
FROM consultation
ORDER BY sid DESC) data);
--답변글 읽어오는 쿼리(RID 필요)
SELECT rid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultReply
WHERE rid=1;
----------------------------------------------------
회원 가입, 로그인, 로그아웃 쿼리 작성
--회원 테이블 작성
CREATE TABLE jmember (
id VARCHAR2(20) --PK
,pw VARCHAR2(20) --암호화 지원
,name NVARCHAR2(20)
,email VARCHAR2(100)
,tel VARCHAR2(30)
,wdate DATE
,grade NUMBER DEFAULT 4 --관리자 1, 직원 2, 학생 3, 회원가입 4
);
ALTER TABLE jmember
ADD CONSTRAINT jmember_id_pk PRIMARY KEY(id);
--관리자 전용 입력 쿼리
INSERT INTO jmember (id, pw, name, email, tel, wdate, grade)
VALUES ('admin', encrypt('1234', 'admin'),'관리자', 'admin@test.com', '02-123-1234', SYSDATE, 1);
COMMIT;
--사용자 입력 쿼리 (회원등급이 자동으로 회원가입(4) 등급이 된다)
INSERT INTO jmember (id, pw, name, email, tel, wdate)
VALUES ('test', encrypt('1234', 'test'),'테스트'
, 'test@test.com', '02-111-1111', SYSDATE);
COMMIT;
--회원 확인용 쿼리 (id, pw 동시 검사)
SELECT id, name, email, tel
, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate
, grade
FROM jmember
WHERE id='admin' AND pw=encrypt('1234', 'admin');
--회원 확인용 쿼리 (id만 검사)
SELECT id, name, email, tel
, TO_CHAR(wdate, 'YYYY-MM-DD HH24:MI') AS wdate
, grade
FROM jmember
WHERE id='admin';
--패스워드 수정 쿼리
UPDATE jmember
SET pw=encrypt('새로운패스워드', '아이디')
WHERE pw=encrypt('기존패스워드', '아이디')
AND id='아이디';
--회원 정보 수정 쿼리
UPDATE jmember
SET name='새로운이름', email='새로운이메일', tel='새로운전화번호'
WHERE pw=encrypt('기존패스워드', '아이디')
AND id='아이디';
-----------------------------------------------------------
--댓글 저장용 테이블 생성
CREATE TABLE consultComment (
cid NUMBER --PK. 댓글 번호
,id VARCHAR2(20) -- 글쓴이의 아이디
,name NVARCHAR2(20) --글쓴이의 이름
,title NVARCHAR2(200)
,wdate DATE
,sid NUMBER --FK. 부모 글번호
);
ALTER TABLE consultComment
ADD CONSTRAINT consultComment_cid_pk PRIMARY KEY(cid);
ALTER TABLE consultComment
ADD CONSTRAINT consultComment_sid_fk FOREIGN KEY (sid)
REFERENCES consultation(sid);
--댓글 추가 여부를 확인할 수 있는 컬럼을 부모 테이블에 추가
ALTER TABLE consultation
ADD commentCount NUMBER DEFAULT 0;
CREATE SEQUENCE consultCommentSeq;
--댓글 입력 (댓글 테이블에 댓글 내용 추가)
INSERT INTO consultComment (cid, id, name, title, wdate, sid)
VALUES (consultCommentSeq.nextval, 'hong', '홍길동', '댓글 테스트', SYSDATE, 1);
COMMIT;
--댓글 입력 (부모 테이블에 댓글 갯수 증가)
UPDATE consultation
SET commentCount = commentCount + 1
WHERE sid=1;
COMMIT;
--댓글 출력(부모글 기준)
SELECT cid, id, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultComment
WHERE sid=1
ORDER BY cid ASC;
--댓글 갯수도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount --댓글 갯수
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid
,commentCount --댓글 갯수
FROM consultation
WHERE sid=1;
--댓글 갯수도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount --댓글 갯수
FROM consultation
ORDER BY sid DESC) data);
--댓글 삭제 쿼리
DELETE
FROM consultComment
WHERE cid=1 AND id='hong';
-----------------------------------------------------------
회원 전용 글쓰기 과정 추가
--회원 전용 글쓰기를 위해서 consultation 테이블에 id 컬럼 추가
ALTER TABLE consultation
ADD id VARCHAR2(20);
--글쓰기 내용을 입력하는 과정에서 ID 추가
INSERT INTO consultation (sid, name, pw, title, content, wdate, id)
VALUES (consultationSeq.nextVal
,'관리자'
,encrypt('1234', '관리자') --사용자 정의 암호화 함수
,'상담 게시판이 오픈되었습니다'
,'많은 이용 바랍니다'
,SYSDATE
, 'hong');
COMMIT;
--아이디도 읽어올 수 있도록 SELECT 쿼리문 변경(검색 쿼리)
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount
,id --아이디
FROM consultation
WHERE LOWER(name) LIKE '%'||LOWER('홍길동')||'%'
ORDER BY sid DESC;
SELECT sid, name, title, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
,rid
,commentCount
,id --아이디
FROM consultation
WHERE sid=1;
--아이디도 읽어올 수 있도록 SELECT 쿼리문 변경(전체 출력 쿼리)
CREATE OR REPLACE VIEW pageListView
AS
SELECT *
FROM (SELECT ROWNUM rnum, data.*
FROM (SELECT sid, name, title
,TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
,rid
,commentCount
,id --아이디
FROM consultation
ORDER BY sid DESC) data);
------------------------------------------------------------
//ConsultationAction.java -> 액션 클래스.
//ConsultationDTO.java
//ConsultationDAO.java --> iBatis XML 파일(consultationIbatis.xml)로 대체
//common.css, table.css -> CSS 전용 파일.
//consultList.jsp -> 글목록 페이지
//consultInsertForm.jsp -> 글 입력 페이지
//consultation.js -> 자바스크립트 전용 파일.
//consultView.jsp -> 글 내용 보기 페이지
//consultPW.jsp -> 패스워드 검사 페이지
//consultModifyForm.jsp -> 글 수정 페이지
//MyUtil.java -> 페이징 처리 전용 메소드
//adminReplyForm.jsp -> 관리자 답변글 쓰기 전용 페이지
//MemberDTO.java
//MemberDAO.java --> iBatis XML 파일(memberIbatis.xml)로 대체
//MemberAction.java -> 회원 관리 전용 액션 클래스
//login.jsp -> 로그인 화면용 페이지
//memberInfo.jsp -> 회원 정보 출력용 페이지
//mainMenu.jsp -> 주메뉴 전용 페이지
//consultMemberInsertForm.jsp -> 회원 전용 글쓰기 페이지
//memberInsertForm.jsp -> 회원 가입 화면용 페이지
//memberIDCheck.jsp -> Ajax를 이용한 아이디 중복 체크 페이지
//memberInsertOK.jsp -> 회원 가입 완료 메시지 페이지
//memberInsertCancel.jsp -> 회원 가입 실패 메시지 페이지
//memberList.jsp -> 회원 명단 출력 페이지 (관리자, 직원 전용)
//adminUpdateForm.jsp -> 회원 수정 페이지 (관리자 전용)
//memberPWModifyForm.jsp -> 패스워드 수정 페이지(사용자)
//memberModifyForm.jsp -> 회원 수정 페이지 (사용자)
//sqlMapConfig.xml -> iBatis XML 파일 등록
//consultationStruts.xml -> 액션 주소 분석
//memberStruts.xml -> 액션 주소 분석
//struts.xml -> Struts XML 파일 등록
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
------------------------------------------------------------
상담게시판 글목록 페이지 작성
//struts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<!-- Configuration for the default package. -->
<package name="default" extends="struts-default" namespace="" >
<global-results>
<result name="error">/exception/error.jsp</result>
</global-results>
</package>
<include file="consultationStruts.xml"></include>
</struts>
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
</package>
</struts>
//sqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings
cacheModelsEnabled="false"
useStatementNamespaces="true"/>
<!-- Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="JDBC.ConnectionURL" value="jdbc:oracle:thin:@220.76.176.101:1521:xe"/>
<property name="JDBC.Username" value="scott"/>
<property name="JDBC.Password" value="tiger"/>
</dataSource>
</transactionManager>
<!-- List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data...) -->
<sqlMap resource="com/util/sqlMap/consultationIbatis.xml"/>
<!-- List more here...
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->
</sqlMapConfig>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
}
//consultList.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
//JSP 코드 작성-> JSTL, EL로 대체
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_${title}]</h3>
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="60">번호</td>
<td class="tName">제목</td>
<td class="tName" width="160">작성자</td>
<td class="tName" width="160">작성일</td>
</tr>
<c:forEach var="dto" items="${arrayList}">
<tr>
<td class="bDot">${dto.sid}</td>
<td class="bTitle">
<a href="consultView.action?sid=${dto.sid}">${dto.title}</a>
<%-- 댓글 있는 경우 댓글 갯수 출력 --%>
<%--
<c:if test="${dto.commentCount > 0}">
<span style="color:red; font-size:10pt;">[${dto.commentCount}]</span>
</c:if>
--%>
<%-- 답변글 있는 경우 [답변있음] 메시지 출력 --%>
<%--
<c:if test="${!empty dto.rid}">
<span style="color:blue; font-size:10pt;">[답변있음]</span>
</c:if>
--%>
</td>
<td class="bDot">${dto.name}</td>
<td class="bDot">${dto.wdate}</td>
</tr>
</c:forEach>
</table>
<table class="style01">
<tr>
<!-- <td class="bDot">[1][2][3][4]...</td> -->
<td class="bDot">
<c:choose>
<c:when test="${empty pageUrl}"><br></c:when>
<c:otherwise>${pageUrl}</c:otherwise>
</c:choose>
</td>
</tr>
</table>
<form action="consultSearch.action" method="post" id="consultSearchForm">
<table class="style01">
<tr>
<td>
<select id="skey" name="skey">
<c:choose>
<c:when test="${param.skey == 'title'}"><option value="title" selected="selected">제목</option></c:when>
<c:otherwise><option value="title">제목</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'content'}"><option value="content" selected="selected">내용</option></c:when>
<c:otherwise><option value="content">내용</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'name'}"><option value="name" selected="selected">글작성자</option></c:when>
<c:otherwise><option value="name">글작성자</option></c:otherwise>
</c:choose>
</select>
<input type="text" id="svalue" name="svalue" value="${param.svalue}">
<a href="javascript:consultSearchSubmit()">[검색]</a>
<span id="searchMsg" style="color:red; display:none;">검색 단어를 입력해야 합니다.</span>
</td>
<td style="text-align:right;">
<%-- 회원 로그인 여부에 따라서 다른 새글쓰기 메뉴 출력됨 --%>
<c:choose>
<c:when test="${empty sessionScope.id}"><a href="consultInsertForm.action">[새글쓰기]</a></c:when>
<c:otherwise><a href="consultMemberInsertForm.action">[새글쓰기]</a></c:otherwise>
</c:choose>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
------------------------------------------------------------
상담 게시판 비회원 글쓰기 작성 (패스워드 필요)
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
</package>
</struts>
//consultInsertForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_글쓰기]</h3>
<form action="consultInsert.action" method="post" id="consultInsertForm">
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="name" name="name"><span id="nameMsg" style="color:red; display:none;">1~20자 이름 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">패스워드*</td>
<td class="bTitle"><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 패스워드 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title"><span id="titleMsg" style="color:red; display:none;">1~100자 제목 입력</span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:consultInsertSubmit()">[글쓰기]</a>
<a href="javascript:consultInsertReset()">[새로작성]</a>
<a href="consultList.action">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
--------------------------------------------------------
상담 게시판 글 내용 보기
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 내용보기 액션 처리 -->
<action name="consultView"
class="com.test.ConsultationAction"
method="consultView">
<result>/consultView.jsp</result>
</action>
</package>
</struts>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
//consultView.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
pageContext.setAttribute("newLineChar", "\n");
pageContext.setAttribute("tabChar", "\t");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_내용보기]</h3>
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><!-- 상담 게시판을 오픈합니다. -->${fn:replace(fn:replace(dto.title, "<", "<"), ">", ">")}</h3>
<span><!-- 관리자 -->${fn:replace(fn:replace(dto.name, "<", "<"), ">", ">")}
<%--
<c:choose>
<c:when test="${empty dto.id}">(비회원)</c:when>
<c:otherwise>(${dto.id})</c:otherwise>
</c:choose>
--%>
</span>
<span><!-- 2010-01-01 -->${dto.wdate}</span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<!-- 많은 이용 바랍니다. -->
${fn:replace(fn:replace( fn:replace(fn:replace(fn:replace(dto.content, "<", "<"), ">", ">"), " ", " "), newLineChar, "<br>"), tabChar, " ")}
<!-- 답변글 내용 출력하는 부분 추가 -->
<%--
<c:if test="${!empty rdto}">
<div style="margin-left:50px;margin-top:20px;">
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3>${fn:replace(fn:replace(rdto.title, "<", "<"), ">", ">")}</h3>
<span>${fn:replace(fn:replace(rdto.name, "<", "<"), ">", ">")}</span>
<span>${rdto.wdate}</span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
${fn:replace(fn:replace( fn:replace(fn:replace(fn:replace(rdto.actiontent, "<", "<"), ">", ">"), " ", " "), newLineChar, "<br>"), tabChar, " ")}
</td>
</tr>
</table>
</div>
</c:if>
--%>
</td>
</tr>
</table>
<!-- 댓글 부분 추가 -->
<%--
<div style="margin-top:10px;font-size:10pt;">
${dto.commentCount} 개의 댓글이 있습니다.
<a href="javascript:commentDivPanel()" id="commentMsg">[댓글 펼치기]</a>
</div>
<div style="margin-top:10px;font-size:10pt;display:none;" id="commentDiv">
<c:if test="${!empty sessionScope.id}">
<!-- 댓글 입력 부분 추가 -->
<form action="commentInsert.action" method="post" id="commentInsertForm">
<input type="hidden" name="sid" value="${dto.sid}">
글쓴이 '${sessionScope.name}' 이름으로
<input type="text" style="width:500px;" id="title" name="title">
(200자 이내)
<a href="javascript:commentInsertSubmit()">[댓글쓰기]</a>
<span id="commentErrMsg" style="color:red; display:none;">1~200자 이내로 입력해야 합니다.</span>
</form>
</c:if>
<table cellpadding="5" class="style01 borderTop" style="font-size:10pt;">
<tr>
<td class="tName" width="120">글쓴이</td>
<td class="tName">댓글내용</td>
<td class="tName" width="120">글쓴날짜</td>
<td class="tName"></td>
</tr>
<c:forEach var="cdto" items="${commentLists}">
<tr>
<td>${cdto.name}</td>
<td>${cdto.title}</td>
<td>${cdto.wdate}</td>
<td>
<c:if test="${!empty sessionScope.id && cdto.id == sessionScope.id}">
<a href="">[삭제]</a>
</c:if>
</td>
</tr>
</c:forEach>
</table>
</div>
--%>
<div style="margin-top:10px;">
<%-- 관리자 전용 메뉴 출력 부분 --%>
<c:if test="${sessionScope.grade == '1'}">
<a href="adminReplyForm.action?sid=${dto.sid}">[*답변글쓰기]</a>
</c:if>
<a href="consultList.action">[목록보기]</a>
<%-- ------------------------------- --%>
<%-- 회원 전용 수정, 삭제 추가한 부분 --%>
<%-- 회원 로그인한 경우와 비회원인 경우를 구분해서 수정, 삭제 진행 --%>
<%--
<c:choose>
<c:when test="${empty sessionScope.id && empty dto.id}">
--%>
<a href="consultModifyForm.action?sid=${dto.sid}">[글 수정]</a>
<a href="consultRemoveForm.action?sid=${dto.sid}">[글 삭제]</a>
<%--
</c:when>
<c:when test="${!empty sessionScope.id && sessionScope.id == dto.id}">
<a href="consultMemberModifyForm.action?sid=${dto.sid}">[글 수정]</a>
<a href="javascript:consultMemberDelete(${dto.sid})">[글 삭제]</a>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
--%>
<%-- ------------------------------- --%>
</div>
</div>
</div>
</body>
</html>
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
---------------------------------------------
상담 게시판 글 수정 (패스워드 검사 과정 추가)
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 내용보기 액션 처리 -->
<action name="consultView"
class="com.test.ConsultationAction"
method="consultView">
<result>/consultView.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 화면 출력 -->
<action name="consultModifyForm"
class="com.test.ConsultationAction"
method="consultModifyForm">
<result name="error">/consultPW.jsp</result>
<result name="success">/consultModifyForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 액션 처리 -->
<action name="consultModify"
class="com.test.ConsultationAction"
method="consultModify">
<result type="redirectAction">consultView.action?sid=${sid}</result>
</action>
</package>
</struts>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String consultModifyForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
}
public String consultModify() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.updateData("consultation.modify", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
<select id="searchByPw"
parameterClass="cdto"
resultClass="Integer">
SELECT COUNT(sid) AS count
FROM consultation
WHERE sid=#sid#
AND name=#name#
AND pw=encrypt(#pw#, #name#)
</select>
<update id="modify"
parameterClass="cdto">
UPDATE consultation
SET title=#title#
, content=#content#
, wdate=SYSDATE
WHERE sid=#sid#
</update>
</sqlMap>
//consultPW.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
<c:if test="${!empty error}">
<script type="text/javascript">
window.onload = msg;
function msg() {
alert("작성자 또는 패스워드가 틀렸습니다.");
}
</script>
</c:if>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_패스워드 확인]</h3>
해당 게시물의 수정, 삭제를 위해 작성자, 패스워드를 확인합니다.
<%-- action 속성을 생략하면 수정, 삭제 두 가지 용도로 모두 사용 가능 --%>
<form method="post" id="pwForm">
<%-- 수정, 삭제를 위한 sid 값이 중복 전송되기 때문에 취소함 --%>
<%--
<input type="hidden" name="sid" value="${param.sid}">
--%>
<table cellpadding="5" style="style01">
<tr>
<td>작성자*</td><td><input type="text" id="name" name="name" ><span id="nameMsg" style="color:red; display:none;">1~20자 이름 입력</span></td>
</tr>
<tr>
<td>패스워드*</td><td><input type="password" id="pw" name="pw"><span id="pwMsg" style="color:red; display:none;">1~20자 패스워드 입력</span></td>
</tr>
</table>
<a href="javascript:pwFormSubmit()">[확인]</a>
<a href="">[취소]</a>
</form>
</div>
</div>
</body>
</html>
//consultModifyForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_글수정]</h3>
<form action="consultModify.action" method="post" id="consultModifyForm">
<%--수정을 위해서 sid 값 재전송 필요 --%>
<input type="hidden" name="sid" value="${dto.sid}">
<table cellpadding="5" class="style01 borderTop borderBottom">
<!--
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="uname" name="uname" value=""><span id="unameMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">패스워드*</td>
<td class="bTitle"><input type="password" id="pw" name="pw" value=""><span id="pwMsg"></span></td>
</tr>
-->
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title" value="${fn:replace(dto.title, '\"', '"')}"><span id="titleMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content">${dto.content}</textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:consultModifySubmit()">[글수정]</a>
<a href="javascript:consultModifyReset()">[새로작성]</a>
<a href="">[취소]</a>
<a href="consultList.action">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
--------------------------------------------------------
상담 게시판 글 삭제 (패스워드 검사 과정 추가)
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 내용보기 액션 처리 -->
<action name="consultView"
class="com.test.ConsultationAction"
method="consultView">
<result>/consultView.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 화면 출력 -->
<action name="consultModifyForm"
class="com.test.ConsultationAction"
method="consultModifyForm">
<result name="error">/consultPW.jsp</result>
<result name="success">/consultModifyForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 액션 처리 -->
<action name="consultModify"
class="com.test.ConsultationAction"
method="consultModify">
<result type="redirectAction">consultView.action?sid=${sid}</result>
</action>
<!-- 상담게시판 비회원 글 삭제 액션 처리 -->
<action name="consultRemoveForm"
class="com.test.ConsultationAction"
method="consultRemoveForm">
<result name="error">/consultPW.jsp</result>
<result name="success" type="redirectAction">consultList.action</result>
</action>
</package>
</struts>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String consultModifyForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
}
public String consultModify() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.updateData("consultation.modify", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultRemoveForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
try {
dao.deleteData("consultation.remove", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
}
}
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
<select id="searchByPw"
parameterClass="cdto"
resultClass="Integer">
SELECT COUNT(sid) AS count
FROM consultation
WHERE sid=#sid#
AND name=#name#
AND pw=encrypt(#pw#, #name#)
</select>
<update id="modify"
parameterClass="cdto">
UPDATE consultation
SET title=#title#
, content=#content#
, wdate=SYSDATE
WHERE sid=#sid#
</update>
<delete id="remove" parameterClass="cdto">
DELETE
FROM consultation
WHERE sid=#sid#
</delete>
</sqlMap>
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
---------------------------------------------------------
상담 게시판 답변글 처리 (관리자 전용 기능)
//consultView.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
pageContext.setAttribute("newLineChar", "\n");
pageContext.setAttribute("tabChar", "\t");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_내용보기]</h3>
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><!-- 상담 게시판을 오픈합니다. -->${fn:replace(fn:replace(dto.title, "<", "<"), ">", ">")}</h3>
<span><!-- 관리자 -->${fn:replace(fn:replace(dto.name, "<", "<"), ">", ">")}
<%--
<c:choose>
<c:when test="${empty dto.id}">(비회원)</c:when>
<c:otherwise>(${dto.id})</c:otherwise>
</c:choose>
--%>
</span>
<span><!-- 2010-01-01 -->${dto.wdate}</span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<!-- 많은 이용 바랍니다. -->
${fn:replace(fn:replace( fn:replace(fn:replace(fn:replace(dto.content, "<", "<"), ">", ">"), " ", " "), newLineChar, "<br>"), tabChar, " ")}
<!-- 답변글 내용 출력하는 부분 추가 -->
<%--
<c:if test="${!empty rdto}">
<div style="margin-left:50px;margin-top:20px;">
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3>${fn:replace(fn:replace(rdto.title, "<", "<"), ">", ">")}</h3>
<span>${fn:replace(fn:replace(rdto.name, "<", "<"), ">", ">")}</span>
<span>${rdto.wdate}</span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
${fn:replace(fn:replace( fn:replace(fn:replace(fn:replace(rdto.actiontent, "<", "<"), ">", ">"), " ", " "), newLineChar, "<br>"), tabChar, " ")}
</td>
</tr>
</table>
</div>
</c:if>
--%>
</td>
</tr>
</table>
<!-- 댓글 부분 추가 -->
<%--
<div style="margin-top:10px;font-size:10pt;">
${dto.commentCount} 개의 댓글이 있습니다.
<a href="javascript:commentDivPanel()" id="commentMsg">[댓글 펼치기]</a>
</div>
<div style="margin-top:10px;font-size:10pt;display:none;" id="commentDiv">
<c:if test="${!empty sessionScope.id}">
<!-- 댓글 입력 부분 추가 -->
<form action="commentInsert.action" method="post" id="commentInsertForm">
<input type="hidden" name="sid" value="${dto.sid}">
글쓴이 '${sessionScope.name}' 이름으로
<input type="text" style="width:500px;" id="title" name="title">
(200자 이내)
<a href="javascript:commentInsertSubmit()">[댓글쓰기]</a>
<span id="commentErrMsg" style="color:red; display:none;">1~200자 이내로 입력해야 합니다.</span>
</form>
</c:if>
<table cellpadding="5" class="style01 borderTop" style="font-size:10pt;">
<tr>
<td class="tName" width="120">글쓴이</td>
<td class="tName">댓글내용</td>
<td class="tName" width="120">글쓴날짜</td>
<td class="tName"></td>
</tr>
<c:forEach var="cdto" items="${commentLists}">
<tr>
<td>${cdto.name}</td>
<td>${cdto.title}</td>
<td>${cdto.wdate}</td>
<td>
<c:if test="${!empty sessionScope.id && cdto.id == sessionScope.id}">
<a href="">[삭제]</a>
</c:if>
</td>
</tr>
</c:forEach>
</table>
</div>
--%>
<div style="margin-top:10px;">
<%-- 관리자 전용 메뉴 출력 부분 --%>
<%--
<c:if test="${sessionScope.grade == '1'}">
--%>
<a href="adminReplyForm.action?sid=${dto.sid}">[*답변글쓰기]</a>
<%--
</c:if>
--%>
<a href="consultList.action">[목록보기]</a>
<%-- ------------------------------- --%>
<%-- 회원 전용 수정, 삭제 추가한 부분 --%>
<%-- 회원 로그인한 경우와 비회원인 경우를 구분해서 수정, 삭제 진행 --%>
<%--
<c:choose>
<c:when test="${empty sessionScope.id && empty dto.id}">
--%>
<a href="consultModifyForm.action?sid=${dto.sid}">[글 수정]</a>
<a href="consultRemoveForm.action?sid=${dto.sid}">[글 삭제]</a>
<%--
</c:when>
<c:when test="${!empty sessionScope.id && sessionScope.id == dto.id}">
<a href="consultMemberModifyForm.action?sid=${dto.sid}">[글 수정]</a>
<a href="javascript:consultMemberDelete(${dto.sid})">[글 삭제]</a>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
--%>
<%-- ------------------------------- --%>
</div>
</div>
</div>
</body>
</html>
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 내용보기 액션 처리 -->
<action name="consultView"
class="com.test.ConsultationAction"
method="consultView">
<result>/consultView.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 화면 출력 -->
<action name="consultModifyForm"
class="com.test.ConsultationAction"
method="consultModifyForm">
<result name="error">/consultPW.jsp</result>
<result name="success">/consultModifyForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 액션 처리 -->
<action name="consultModify"
class="com.test.ConsultationAction"
method="consultModify">
<result type="redirectAction">consultView.action?sid=${sid}</result>
</action>
<!-- 상담게시판 비회원 글 삭제 액션 처리 -->
<action name="consultRemoveForm"
class="com.test.ConsultationAction"
method="consultRemoveForm">
<result name="error">/consultPW.jsp</result>
<result name="success" type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 답변글 입력 화면 출력(관리자 전용) -->
<action name="adminReplyForm"
class="com.test.ConsultationAction"
method="adminReplyForm">
<result>/adminReplyForm.jsp</result>
</action>
<!-- 상담게시판 답변글 입력 액션 처리(관리자 전용) -->
<action name="adminReply"
class="com.test.ConsultationAction"
method="adminReply">
<result type="redirectAction">consultList.action</result>
</action>
</package>
</struts>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
<select id="searchByPw"
parameterClass="cdto"
resultClass="Integer">
SELECT COUNT(sid) AS count
FROM consultation
WHERE sid=#sid#
AND name=#name#
AND pw=encrypt(#pw#, #name#)
</select>
<update id="modify"
parameterClass="cdto">
UPDATE consultation
SET title=#title#
, content=#content#
, wdate=SYSDATE
WHERE sid=#sid#
</update>
<delete id="remove" parameterClass="cdto">
DELETE
FROM consultation
WHERE sid=#sid#
</delete>
<insert id="adminReply" parameterClass="cdto">
INSERT INTO consultReply (rid, name, title, content, wdate)
VALUES (consultReplySeq.nextval
, #name#
, #title#
, #content#
, SYSDATE)
</insert>
<update id="modifySidReply" parameterClass="cdto">
UPDATE consultation
SET rid=consultReplySeq.currval
WHERE sid=#sid#
</update>
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String consultModifyForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
}
public String consultModify() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.updateData("consultation.modify", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultRemoveForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
try {
dao.deleteData("consultation.remove", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
}
public String adminReplyForm() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String adminReply() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.insertUpdateData("consultation.adminReply"
,"consultation.modifySidReply"
, dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
//CommonDAO.java
package com.util.dao;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
public interface CommonDAO {
// 데이터 추가
public void insertData(String id, Object value) throws SQLException;
// 데이터 수정
public int updateData(String id, Object value) throws SQLException;
public int updateData(String id, Map<String, Object> map) throws SQLException;
// 데이터 삭제
public int deleteData(String id, Object value) throws SQLException;
public int deleteData(String id, Map<String, Object> map) throws SQLException;
public int deleteAllData(String id) throws SQLException;
// 해당 레코드 가져오기
public Object getReadData(String id);
public Object getReadData(String id, Object value);
public Object getReadData(String id, Map<String, Object> map);
public int getIntValue(String id);
public int getIntValue(String id, Object value);
public int getIntValue(String id, Map<String, Object> map);
public List<Object> getListData(String id);
public List<Object> getListData(String id, Object value);
public List<Object> getListData(String id, Map<String, Object> map);
//insert 쿼리와 update 쿼리를 같이 실행
public void insertUpdateData(String idInsert, String idUpdate, Object value) throws SQLException;
}
//CommonDAOImpl.java
package com.util.dao;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.util.sqlMap.SqlMapConfig;
public class CommonDAOImpl implements CommonDAO {
private SqlMapClient sqlMap;
public CommonDAOImpl() {
this.sqlMap = SqlMapConfig.getSqlMapInstance();
}
public static CommonDAO getInstance() {
return new CommonDAOImpl();
}
@Override
public void insertData(String id, Object value) throws SQLException{
try {
sqlMap.startTransaction();
sqlMap.insert(id, value);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
}
@Override
public int updateData(String id, Map<String, Object> map) throws SQLException{
int result = 0;
try {
sqlMap.startTransaction();
result = sqlMap.update(id, map);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
return result;
}
@Override
public int updateData(String id, Object value) throws SQLException{
int result = 0;
try {
sqlMap.startTransaction();
result = sqlMap.update(id, value);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
return result;
}
@Override
public int deleteData(String id, Object value) throws SQLException{
int result = 0;
try {
sqlMap.startTransaction();
result = sqlMap.delete(id, value);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
return result;
}
@Override
public int deleteData(String id, Map<String, Object> map) throws SQLException{
int result = 0;
try {
sqlMap.startTransaction();
result = sqlMap.delete(id, map);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
return result;
}
@Override
public int deleteAllData(String id) throws SQLException{
int result = 0;
try {
sqlMap.startTransaction();
result = sqlMap.delete(id);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
return result;
}
@Override
public Object getReadData(String id, Object value) {
try {
return sqlMap.queryForObject(id, value);
} catch (SQLException e) {
System.out.println(e.toString());
}
return null;
}
@Override
public Object getReadData(String id) {
try {
return sqlMap.queryForObject(id);
} catch (SQLException e) {
System.out.println(e.toString());
}
return null;
}
@Override
public Object getReadData(String id, Map<String, Object> map) {
try {
return sqlMap.queryForObject(id, map);
} catch (SQLException e) {
System.out.println(e.toString());
}
return null;
}
@Override
public int getIntValue(String id) {
try {
return ((Integer)sqlMap.queryForObject(id)).intValue();
} catch (Exception e) {
System.out.println(e.toString());
}
return 0;
}
@Override
public int getIntValue(String id, Object value) {
try {
return ((Integer)sqlMap.queryForObject(id, value)).intValue();
} catch (Exception e) {
System.out.println(e.toString());
}
return 0;
}
@Override
public int getIntValue(String id, Map<String, Object> map) {
try {
return ((Integer)sqlMap.queryForObject(id, map)).intValue();
} catch (Exception e) {
System.out.println(e.toString());
}
return 0;
}
@SuppressWarnings("unchecked")
@Override
public List<Object> getListData(String id) {
try {
return (List<Object>) sqlMap.queryForList(id);
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<Object> getListData(String id, Object value) {
try {
return (List<Object>) sqlMap.queryForList(id, value);
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
@SuppressWarnings("unchecked")
@Override
public List<Object> getListData(String id, Map<String, Object> map) {
try {
return (List<Object>) sqlMap.queryForList(id, map);
} catch (Exception e) {
System.out.println(e.toString());
}
return null;
}
@Override
public void insertUpdateData(String idInsert, String idUpdate, Object value)
throws SQLException {
try {
sqlMap.startTransaction();
sqlMap.insert(idInsert, value);
sqlMap.update(idUpdate, value);
sqlMap.commitTransaction();
} catch (SQLException e) {
System.out.println(e.toString());
throw e;
} finally {
try {
sqlMap.endTransaction();
} catch(SQLException e) {}
}
}
}
//adminReplyForm.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
pageContext.setAttribute("newLineChar", "\n");
pageContext.setAttribute("tabChar", "\t");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
<script type="text/javascript">
function adminReplySubmit() {
//작성자, 제목 검사 후 서브밋 처리
var adminReplyForm = document.getElementById("adminReplyForm");
var name = document.getElementById("name");
var title = document.getElementById("title");
var nameMsg = document.getElementById("nameMsg");
var titleMsg = document.getElementById("titleMsg");
if (name.value == "") {
nameMsg.innerHTML = "이름을 입력해야 합니다.";
return;
}
if (title.value == "") {
titleMsg.innerHTML = "제목을 입력해야 합니다.";
return;
}
adminReplyForm.submit();
}
</script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[*상담게시판_답변글쓰기]</h3>
<div style="margin-bottom:20px;">
<table cellpadding="5" class="style01 borderTop">
<tr>
<td class="bTitle">
<h3><!-- 상담 게시판을 오픈합니다. -->${fn:replace(fn:replace(dto.title, "<", "<"), ">", ">")}</h3>
<span><!-- 관리자 -->${fn:replace(fn:replace(dto.name, "<", "<"), ">", ">")}
<%--
<c:choose>
<c:when test="${empty dto.id}">(비회원)</c:when>
<c:otherwise>(${dto.id})</c:otherwise>
</c:choose>
--%>
</span>
<span><!-- 2010-01-01 -->${dto.wdate}</span>
</td>
</tr>
<tr>
<td class="bTitle" style="padding-top:20px;padding-bottom:20px;">
<!-- 많은 이용 바랍니다. -->
${fn:replace(fn:replace( fn:replace(fn:replace(fn:replace(dto.content, "<", "<"), ">", ">"), " ", " "), newLineChar, "<br>"), tabChar, " ")}
</td>
</tr>
</table>
</div>
<form action="adminReply.action" method="post" id="adminReplyForm">
<%-- 답변글 저장시 부모글 번호 재전송 필요 --%>
<input type="hidden" name="sid" value="${dto.sid}">
<table cellpadding="5" class="style01 borderTop borderBottom">
<tr>
<td class="tName" width="100">작성자*</td>
<td class="bTitle"><input type="text" id="name" name="name" value="관리자"><span id="nameMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">제목*</td>
<td class="bTitle"><input type="text" style="width:600px;" id="title" name="title"><span id="titleMsg"></span></td>
</tr>
<tr>
<td class="tName" width="100">내용</td>
<td class="bTitle"><textarea style="width:600px;height:200px;" id="content" name="content"></textarea></td>
</tr>
</table>
<table>
<tr>
<td>
<a href="javascript:adminReplySubmit()">[글쓰기]</a>
<a href="consultList.action">[목록보기]</a>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
상담 게시판 답변글 처리 (관리자 전용 기능)에서 답변글 쓰는 부분까지만 완성됨.
--------------------------------------------------------
문제) 상담 게시판 글 검색
//consultList.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
//JSP 코드 작성-> JSTL, EL로 대체
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_${title}]</h3>
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="60">번호</td>
<td class="tName">제목</td>
<td class="tName" width="160">작성자</td>
<td class="tName" width="160">작성일</td>
</tr>
<c:forEach var="dto" items="${arrayList}">
<tr>
<td class="bDot">${dto.sid}</td>
<td class="bTitle">
<a href="consultView.action?sid=${dto.sid}">${dto.title}</a>
<%-- 댓글 있는 경우 댓글 갯수 출력 --%>
<%--
<c:if test="${dto.commentCount > 0}">
<span style="color:red; font-size:10pt;">[${dto.commentCount}]</span>
</c:if>
--%>
<%-- 답변글 있는 경우 [답변있음] 메시지 출력 --%>
<%--
<c:if test="${!empty dto.rid}">
<span style="color:blue; font-size:10pt;">[답변있음]</span>
</c:if>
--%>
</td>
<td class="bDot">${dto.name}</td>
<td class="bDot">${dto.wdate}</td>
</tr>
</c:forEach>
</table>
<table class="style01">
<tr>
<!-- <td class="bDot">[1][2][3][4]...</td> -->
<td class="bDot">
<c:choose>
<c:when test="${empty pageUrl}"><br></c:when>
<c:otherwise>${pageUrl}</c:otherwise>
</c:choose>
</td>
</tr>
</table>
<form action="consultSearch.action" method="post" id="consultSearchForm">
<table class="style01">
<tr>
<td>
<select id="skey" name="skey">
<c:choose>
<c:when test="${param.skey == 'title'}"><option value="title" selected="selected">제목</option></c:when>
<c:otherwise><option value="title">제목</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'content'}"><option value="content" selected="selected">내용</option></c:when>
<c:otherwise><option value="content">내용</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'name'}"><option value="name" selected="selected">글작성자</option></c:when>
<c:otherwise><option value="name">글작성자</option></c:otherwise>
</c:choose>
</select>
<input type="text" id="svalue" name="svalue" value="${param.svalue}">
<a href="javascript:consultSearchSubmit()">[검색]</a>
<span id="searchMsg" style="color:red; display:none;">검색 단어를 입력해야 합니다.</span>
</td>
<td style="text-align:right;">
<%-- 회원 로그인 여부에 따라서 다른 새글쓰기 메뉴 출력됨 --%>
<c:choose>
<c:when test="${empty sessionScope.id}"><a href="consultInsertForm.action">[새글쓰기]</a></c:when>
<c:otherwise><a href="consultMemberInsertForm.action">[새글쓰기]</a></c:otherwise>
</c:choose>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//consultationStruts.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="consultation" extends="struts-default" namespace="" >
<!-- 상담게시판 글목록 출력 -->
<action name="consultList"
class="com.test.ConsultationAction"
method="consultList">
<result>/consultList.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 화면 출력 -->
<action name="consultInsertForm">
<result>/consultInsertForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글쓰기 액션 처리 -->
<action name="consultInsert"
class="com.test.ConsultationAction"
method="consultInsert">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 내용보기 액션 처리 -->
<action name="consultView"
class="com.test.ConsultationAction"
method="consultView">
<result>/consultView.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 화면 출력 -->
<action name="consultModifyForm"
class="com.test.ConsultationAction"
method="consultModifyForm">
<result name="error">/consultPW.jsp</result>
<result name="success">/consultModifyForm.jsp</result>
</action>
<!-- 상담게시판 비회원 글 수정 액션 처리 -->
<action name="consultModify"
class="com.test.ConsultationAction"
method="consultModify">
<result type="redirectAction">consultView.action?sid=${sid}</result>
</action>
<!-- 상담게시판 비회원 글 삭제 액션 처리 -->
<action name="consultRemoveForm"
class="com.test.ConsultationAction"
method="consultRemoveForm">
<result name="error">/consultPW.jsp</result>
<result name="success" type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 답변글 입력 화면 출력(관리자 전용) -->
<action name="adminReplyForm"
class="com.test.ConsultationAction"
method="adminReplyForm">
<result>/adminReplyForm.jsp</result>
</action>
<!-- 상담게시판 답변글 입력 액션 처리(관리자 전용) -->
<action name="adminReply"
class="com.test.ConsultationAction"
method="adminReply">
<result type="redirectAction">consultList.action</result>
</action>
<!-- 상담게시판 글 검색 액션 처리 -->
<action name="consultSearch"
class="com.test.ConsultationAction"
method="consultSearch">
<result>/consultList.jsp</result>
</action>
</package>
</struts>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
<select id="searchByPw"
parameterClass="cdto"
resultClass="Integer">
SELECT COUNT(sid) AS count
FROM consultation
WHERE sid=#sid#
AND name=#name#
AND pw=encrypt(#pw#, #name#)
</select>
<update id="modify"
parameterClass="cdto">
UPDATE consultation
SET title=#title#
, content=#content#
, wdate=SYSDATE
WHERE sid=#sid#
</update>
<delete id="remove" parameterClass="cdto">
DELETE
FROM consultation
WHERE sid=#sid#
</delete>
<insert id="adminReply" parameterClass="cdto">
INSERT INTO consultReply (rid, name, title, content, wdate)
VALUES (consultReplySeq.nextval
, #name#
, #title#
, #content#
, SYSDATE)
</insert>
<update id="modifySidReply" parameterClass="cdto">
UPDATE consultation
SET rid=consultReplySeq.currval
WHERE sid=#sid#
</update>
<!-- 데이터가 아니라 문장의 일부인 경우는 $skey$ 형태로 표기할 것 -->
<select id="searchLists"
parameterClass="java.util.Map"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER($skey$) LIKE '%%'||LOWER(#svalue#)||'%%'
ORDER BY sid DESC
</select>
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
CommonDAO dao = CommonDAOImpl.getInstance();
List<Object> arrayList = dao.getListData("consultation.lists");
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글목록");
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String consultModifyForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
}
public String consultModify() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.updateData("consultation.modify", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultRemoveForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
try {
dao.deleteData("consultation.remove", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
}
public String adminReplyForm() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String adminReply() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.insertUpdateData("consultation.adminReply"
,"consultation.modifySidReply"
, dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultSearch() {
HttpServletRequest req = ServletActionContext.getRequest();
String skey = req.getParameter("skey");
String svalue = req.getParameter("svalue");
CommonDAO dao = CommonDAOImpl.getInstance();
Map<String, String> map = new HashMap<String, String>();
map.put("skey", skey);
map.put("svalue", svalue);
List<Object> arrayList = dao.getListData("consultation.searchLists", map);
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글검색");
return SUCCESS;
}
}
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
--------------------------------------------------------
문제) 상담 게시판 페이징 처리
-> MyUtil.java 파일 준비할 것.
//consultList.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%
//JSP 코드 작성-> JSTL, EL로 대체
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Java 전문 교육센터</title>
<link rel="stylesheet" type="text/css" href="common.css">
<link rel="stylesheet" type="text/css" href="table.css">
<script type="text/javascript" src="consultation.js"></script>
</head>
<body>
<div>
<%-- 메인메뉴를 import 구문으로 대체 --%>
<c:import url="mainMenu.jsp"></c:import>
<div>
<h3>[상담게시판_${title}]</h3>
<table cellpadding="5" class="style01">
<tr>
<td class="tName" width="60">번호</td>
<td class="tName">제목</td>
<td class="tName" width="160">작성자</td>
<td class="tName" width="160">작성일</td>
</tr>
<c:forEach var="dto" items="${arrayList}">
<tr>
<td class="bDot">${dto.sid}</td>
<td class="bTitle">
<a href="consultView.action?sid=${dto.sid}">${dto.title}</a>
<%-- 댓글 있는 경우 댓글 갯수 출력 --%>
<%--
<c:if test="${dto.commentCount > 0}">
<span style="color:red; font-size:10pt;">[${dto.commentCount}]</span>
</c:if>
--%>
<%-- 답변글 있는 경우 [답변있음] 메시지 출력 --%>
<%--
<c:if test="${!empty dto.rid}">
<span style="color:blue; font-size:10pt;">[답변있음]</span>
</c:if>
--%>
</td>
<td class="bDot">${dto.name}</td>
<td class="bDot">${dto.wdate}</td>
</tr>
</c:forEach>
</table>
<table class="style01">
<tr>
<!-- <td class="bDot">[1][2][3][4]...</td> -->
<td class="bDot">
<c:choose>
<c:when test="${empty pageUrl}"><br></c:when>
<c:otherwise>${pageUrl}</c:otherwise>
</c:choose>
</td>
</tr>
</table>
<form action="consultSearch.action" method="post" id="consultSearchForm">
<table class="style01">
<tr>
<td>
<select id="skey" name="skey">
<c:choose>
<c:when test="${param.skey == 'title'}"><option value="title" selected="selected">제목</option></c:when>
<c:otherwise><option value="title">제목</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'content'}"><option value="content" selected="selected">내용</option></c:when>
<c:otherwise><option value="content">내용</option></c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.skey == 'name'}"><option value="name" selected="selected">글작성자</option></c:when>
<c:otherwise><option value="name">글작성자</option></c:otherwise>
</c:choose>
</select>
<input type="text" id="svalue" name="svalue" value="${param.svalue}">
<a href="javascript:consultSearchSubmit()">[검색]</a>
<span id="searchMsg" style="color:red; display:none;">검색 단어를 입력해야 합니다.</span>
</td>
<td style="text-align:right;">
<%-- 회원 로그인 여부에 따라서 다른 새글쓰기 메뉴 출력됨 --%>
<c:choose>
<c:when test="${empty sessionScope.id}"><a href="consultInsertForm.action">[새글쓰기]</a></c:when>
<c:otherwise><a href="consultMemberInsertForm.action">[새글쓰기]</a></c:otherwise>
</c:choose>
</td>
</tr>
</table>
</form>
</div>
</div>
</body>
</html>
//consultationIbatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap
PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="consultation">
<typeAlias alias="cdto" type="com.test.ConsultationDTO"/>
<!-- 페이지 처리 전 -->
<select id="lists" resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
ORDER BY sid DESC
</select>
<insert id="add" parameterClass="cdto">
INSERT INTO consultation (sid, name, pw, title, content, wdate)
VALUES (consultationSeq.nextVal
,#name#
,encrypt(#pw#, #name#)
,#title#
,#content#
,SYSDATE)
</insert>
<select id="searchBySid"
parameterClass="cdto"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
, content
FROM consultation
WHERE sid=#sid#
</select>
<select id="searchByPw"
parameterClass="cdto"
resultClass="Integer">
SELECT COUNT(sid) AS count
FROM consultation
WHERE sid=#sid#
AND name=#name#
AND pw=encrypt(#pw#, #name#)
</select>
<update id="modify"
parameterClass="cdto">
UPDATE consultation
SET title=#title#
, content=#content#
, wdate=SYSDATE
WHERE sid=#sid#
</update>
<delete id="remove" parameterClass="cdto">
DELETE
FROM consultation
WHERE sid=#sid#
</delete>
<insert id="adminReply" parameterClass="cdto">
INSERT INTO consultReply (rid, name, title, content, wdate)
VALUES (consultReplySeq.nextval
, #name#
, #title#
, #content#
, SYSDATE)
</insert>
<update id="modifySidReply" parameterClass="cdto">
UPDATE consultation
SET rid=consultReplySeq.currval
WHERE sid=#sid#
</update>
<!-- 데이터가 아니라 문장의 일부인 경우는 $skey$ 형태로 표기할 것 -->
<select id="searchLists"
parameterClass="java.util.Map"
resultClass="cdto">
SELECT sid, name, title
, TO_CHAR(wdate, 'YYYY-MM-DD') AS wdate
FROM consultation
WHERE LOWER($skey$) LIKE '%%'||LOWER(#svalue#)||'%%'
ORDER BY sid DESC
</select>
<!-- ////////////////////// -->
<!-- 페이지 처리 후 -->
<select id="pageLists"
parameterClass="java.util.Map"
resultClass="cdto">
<![CDATA[
SELECT *
FROM pageListView
WHERE rnum>=#start# AND rnum<=#end#
]]>
</select>
<select id="count"
resultClass="Integer">
SELECT COUNT(*) AS count
FROM consultation
</select>
<!-- //////////////////// -->
</sqlMap>
//ConsultationAction.java
package com.test;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
import com.util.dao.*;
import java.sql.SQLException;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
public class ConsultationAction extends ActionSupport
implements Preparable, ModelDriven<ConsultationDTO> {
private static final long serialVersionUID = 1L;
private ConsultationDTO dto;
@Override
public ConsultationDTO getModel() {
return dto;
}
@Override
public void prepare() throws Exception {
dto = new ConsultationDTO();
}
public String consultList() {
HttpServletRequest req = ServletActionContext.getRequest();
//--------------------------------
//페이지 처리 후
//페이지 번호 수신
//한 페이지당 게시물 숫자 지정
//총 게시물 수 확인
//총 페이지수 계산
//예를 들어, 한 페이지당 10개씩 계산
//게시물 21개 있다면
//총 페이지는 3페이지
//특정 페이지의 start, end 값 계산
String pn = req.getParameter("pageNum");
if (pn == null) {
pn = "1";
}
int recordCountPerPage = 5;
int start = (Integer.parseInt(pn) - 1)
* recordCountPerPage + 1;
int end = Integer.parseInt(pn) * recordCountPerPage;
int recordCount = 0;
//--------------------------------
CommonDAO dao = CommonDAOImpl.getInstance();
//페이지 처리 전
//List<Object> arrayList = dao.getListData("consultation.lists");
//--------------------------
//페이지 처리 후
recordCount = dao.getIntValue("consultation.count");
Map<String, Object> map = new HashMap<String, Object>();
map.put("start", start);
map.put("end", end);
List<Object> arrayList = dao.getListData("consultation.pageLists", map);
//--------------------------
//---------------------------
//페이지 처리 후
com.util.MyUtil myUtil = new com.util.MyUtil();
String pageUrl = "[1][2][3][4]...";
pageUrl = myUtil.pageIndexList(
Integer.parseInt(pn)
, myUtil.getPageCount(recordCountPerPage, recordCount)
, "consultList.action");
//---------------------------
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글목록");
req.setAttribute("pageUrl", pageUrl);
return SUCCESS;
}
public String consultInsert() {
CommonDAO dao = CommonDAOImpl.getInstance();
//-----------------------------
//입력 오류 처리 필요
//오라클에서는 입력 데이터에
//작은따옴표(')가 있으면
//입력 오류 발생됨
//작은따옴표(')를 두 번 입력('')하면 해결됨.
//-> iBatis는 자동 실행됨
//-----------------------------
try {
dao.insertData("consultation.add", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultView() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String consultModifyForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
}
}
public String consultModify() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.updateData("consultation.modify", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultRemoveForm() {
if (dto.getName() == null && dto.getPw() == null) {
return ERROR;
} else {
CommonDAO dao = CommonDAOImpl.getInstance();
int result = dao.getIntValue("consultation.searchByPw", dto);
if (result == 0) {
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("error", "true");
return ERROR;
} else {
try {
dao.deleteData("consultation.remove", dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
}
}
public String adminReplyForm() {
CommonDAO dao = CommonDAOImpl.getInstance();
Object obj = dao.getReadData("consultation.searchBySid", dto);
HttpServletRequest req = ServletActionContext.getRequest();
req.setAttribute("dto", obj);
return SUCCESS;
}
public String adminReply() {
CommonDAO dao = CommonDAOImpl.getInstance();
try {
dao.insertUpdateData("consultation.adminReply"
,"consultation.modifySidReply"
, dto);
} catch (SQLException e) {
System.out.println(e.toString());
}
return SUCCESS;
}
public String consultSearch() {
HttpServletRequest req = ServletActionContext.getRequest();
String skey = req.getParameter("skey");
String svalue = req.getParameter("svalue");
CommonDAO dao = CommonDAOImpl.getInstance();
Map<String, String> map = new HashMap<String, String>();
map.put("skey", skey);
map.put("svalue", svalue);
List<Object> arrayList = dao.getListData("consultation.searchLists", map);
req.setAttribute("arrayList", arrayList);
req.setAttribute("title", "글검색");
return SUCCESS;
}
}
//요청주소
http://localhost:8090/ConsultationStruts2_20121220/consultList.action
-------------------------------------------------
'Java > Struts2, iBatis' 카테고리의 다른 글
[20121224] 5일차 (상담게시판 Struts2, iBatis 버젼) (0) | 2012.12.28 |
---|---|
[20121221] 4일차 (상담게시판 스트럿츠2 버젼) (0) | 2012.12.28 |
[20121218] 2일차 (회원관리+성적처리 프로젝트 (Struts, iBatis 버전)) (0) | 2012.12.18 |
[20121217] 1일차 (Struts2, iBatis Framework, 환경설정) (0) | 2012.12.18 |
WRITTEN BY