본문 바로가기
STUDY/STRUTS

Struct1 + iBatis 게시판(4)

by Anne of Green Galbes 2019. 3. 21.

5. 게시물 수정(update)

○ updatd.jsp 파일을 만들지 않고 created.jsp파일만 사용하여 상황에 따라 create/update를 사용

  - 주소창에 mode라는 값을 넘겨준다

  - mode가 save일 때는 입력 : 시작점 리스트(list.jsp)화면

  - mode가 updateok일 때는 수정 : 시작점 게시물(article.jsp)화면


5-1 created 메소드 수정

○ create메소드를 찾아가는 경우

  - list화면에서 글 올리기 클릭 시 → mode값을 넘겨주지 않는다(null)

  - article화면에서 수정하기 클릭시  → mode값은 update

public ActionForward created(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

String mode = request.getParameter("mode");

 //mode값으로 입력창인지 수정창인지 구분

if(mode==null){//insert

request.setAttribute("mode", "save");

}


else{//update

CommonDAO dao = CommonDAOImpl.getInstance();

int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

if(searchValue==null){

searchKey = "subject";

searchValue = "";

}

if(request.getMethod().equalsIgnoreCase("GET"))

searchKey = URLDecoder.decode(searchKey,"UTF-8");

 //수정시 필요한 정보 가져오기

BoardForm dto = (BoardForm)dao.getReadData("boardTest.readData", num);

if(dto==null){

return mapping.findForward("list");

}

request.setAttribute("dto", dto);

request.setAttribute("mode", "updateok");

request.setAttribute("pageNum", pageNum);

request.setAttribute("searchKey", searchKey);

request.setAttribute("searchValue", searchValue);

}

return mapping.findForward("created");

}


5-2. created.jsp 수정

① body 부분

○ mode : 이 창이 수정창인지 입력창인지 구분하기 위해 사용

○ 입력 창

  - num, pageNum, searchKey, searchValue값이 필요 없다

○ 수정창

  - 수정에서는 값이 미리 들어가 있어 value값을 추가

  - 수정 후 들어왔던 페이지로 나가기 위해서 num, pageNum, 검색을 했을 경우 searchKey / searchValue값이 필요

     → created메소드에서 request.setAttribute으로 보내준 값

     → hidden값으로 같이 전달

<body>

<div id="bbs">

<div id="bbs_title">

게 시 판(Struts1 + iBatis)

</div>

<form action="" name="myForm" method="post">

<div id="bbsCreated">

<div class="bbsCreated_bottomLine">

<dl>

<dt>제&nbsp;&nbsp;&nbsp;&nbsp;목</dt>

<dd>

<input type="text" name="subject" size="74" maxlength="100" class="boxTF" value="${dto.subject }"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>작성자</dt>

<dd>

<input type="text" name="name" size="35" maxlength="20" class="boxTF" value="${dto.name }"/>

</dd>

</dl>

</div>

<div class="bbsCreated_bottomLine">

<dl>

<dt>E-Mail</dt>

<dd>

<input type="text" name="email" size="35" maxlength="50" class="boxTF" value="${dto.email }"/>

</dd>

</dl>

</div>

<div id="bbsCreated_content">

<dl>

<dt>내&nbsp;&nbsp;&nbsp;&nbsp;용</dt>

<dd>

<textarea rows="12" cols="63" name="content" class="boxTA">${dto.content }</textarea>

</dd>

</dl>

</div>

<div class="bbsCreated_noLine">

<dl>

<dt>패스워드</dt>

<dd>

<input type="password" name="pwd" size="35" maxlength="7" class="boxTF" value="${dto.pwd }"/>

&nbsp;{게시물 수정 및 삭제시 필요!!!}

</dd>

</dl>

</div>

<div id="bbsCreated_footer">

<input type="hidden" name="method" value="created_ok">

<!-- update일때 필요한 값 -->

<input type="hidden" name="num" value="${dto.num }"/>

<input type="hidden" name="pageNum" value="${pageNum }"/>

<input type="hidden" name="searchKey" value="${searchKey }">

<input type="hidden" name="searchValue" value="${searchValue }">

<!-- 이 창이 create창인지 update창인지 구분하기 위해 사용 -->

<input type="hidden" name="mode" value="${mode }"/>

   //mode값으로 수정인지 입력인지 구분하여 버튼을 다르게 보여준다

<c:if test="${mode=='save' }">

<input type="button" value="등록하기" class="btn2" onclick="sendIt();"/>

<input type="reset" value="다시입력" class="btn2" onclick="document.myForm.subject.focus();"/>

<input type="button" value="작성취소" class="btn2"

onclick="javascript:location.href='<%=cp%>/boardTest.do?method=list';"/>

</c:if>

<c:if test="${mode=='updateok' }">

<input type="button" value="수정하기" class="btn2" onclick="sendIt();"/>

<input type="button" value="수정취소" class="btn2"

onclick="javascript:location.href='<%=cp%>/boardTest.do?method=list&pageNum=${pageNum }

&searchKey=${searchKey }&searchValue=${searchValue }';"/>

</c:if>

</div>

</div>

</form>

</div>

</body>


5-3 created_ok 메소드 수정

○ mode값을 받아 입력과 수정 구분

   - mode는 created메소드에서 save/updateok 값으로 넘기기 시작

   - 수정은 article에서 mode=update로 넘기기 시작 → created메소드에서 updateok로 변경 후 넘김

○ 입력창

   - 입력받은 값을 DB에 넣기만 하면 된다.

○ 수정창

   - 필요한 값(num / pageNum / searchKey / searchValue)을 받아서 session에 넣어준다

   - session에 넣어주는 이유 : struts-config_boardTest.xml에서는 ${ }를 사용할 수 없기 때문

○ dao는 null로 무조건 초기화 해줘야 한다.

public ActionForward created_ok(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

CommonDAO dao = CommonDAOImpl.getInstance();

BoardForm f = (BoardForm)form;

String mode = request.getParameter("mode"); //save,updateok

if(mode.equals("save")){//입력

int maxNum=dao.getIntValue("boardTest.maxNum"); //boardTest_sqlMap.xml에 있는 것을 넣어준다

f.setNum(maxNum +1);

f.setIpAddr(request.getRemoteAddr());

dao.insertData("boardTest.insertData", f);//f는 boardForm을 넘겨준다 parameterClass여기안에있는 경로

}else{//수정

String pageNum = request.getParameter("pageNum");

dao.updateData("boardTest.updateData", f);

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

if(searchValue==null){

searchKey = "subject";

searchValue = "";

}

if(request.getMethod().equalsIgnoreCase("GET"))

searchKey = URLDecoder.decode(searchKey,"UTF-8");

HttpSession session = request.getSession();

session.setAttribute("pageNum", pageNum);

session.setAttribute("searchKey", searchKey);

session.setAttribute("searchValue", searchValue);

}

dao=null;

return mapping.findForward("created_ok");

}


5-4 struts-config_boardTest.xml 확인

<action-mappings>

<action path="/boardTest" type="com.boardTest.BoardAction" name="boardTestForm" scope="request" parameter="method">

<forward name="created" path="/boardTest/created.jsp"/>

<forward name="created_ok" redirect="true" path="/boardTest.do?method=list"/>

<forward name="list" path="/boardTest/list.jsp"/>

<forward name="article" path="/boardTest/article.jsp"/>

</action>

</action-mappings>


5-5 list메소드 수정

○ 수정창에서 넘어가는 경우에만 session에 pageNum / searchKey / searchValue 값이 들어있다.

   - 입력창에서 들어올 경우 

      (String)session.getAttribute("pageNum") / ("searchKey") / ("searchValue) 은 null

public ActionForward list(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

CommonDAO dao = CommonDAOImpl.getInstance();

String cp = request.getContextPath();

MyUtil myUtil = new MyUtil();

int numPerPage = 10;

int totalPage = 0;

int totalDataCount = 0;

String pageNum = request.getParameter("pageNum");


HttpSession session = request.getSession();

if(pageNum==null){

pageNum = (String)session.getAttribute("pageNum");

}

session.removeAttribute("pageNum");

int currentPage = 1;

if(pageNum!=null)

currentPage = Integer.parseInt(pageNum);

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");


if(searchValue==null){

searchKey = (String)session.getAttribute("searchKey");

searchValue = (String)session.getAttribute("searchValue");

}

session.removeAttribute("searchKey");

session.removeAttribute("searchValue");

if(searchValue==null){

searchKey = "subject";

searchValue = "";

}

if(request.getMethod().equalsIgnoreCase("GET"))

searchKey = URLDecoder.decode(searchKey,"UTF-8");

//map에 searchKey / searchValue값 넣어서 데이터를 보낸다 → boardTest_sqlMap.xml에서 만든 함수에서 map을 받아서 사용하기 때문

Map<String, Object> hMap = new HashMap<String, Object>();

hMap.put("searchKey", searchKey);

hMap.put("searchValue", searchValue);

//boardTest_sqlMap.xml에서 만든 함수의 id를 id에 작성

totalDataCount = dao.getIntValue("boardTest.dataCount",hMap);

if(totalDataCount!=0)

totalPage = myUtil.getPageCount(numPerPage, totalDataCount);

if(currentPage>totalPage)

currentPage = totalPage;

int start = (currentPage-1)*numPerPage+1;

int end = currentPage*numPerPage;

//hMap는 총 4개의 데이터가 들어있다

hMap.put("start", start);

hMap.put("end", end);

List<Object> lists = dao.getListData("boardTest.listData", hMap);

String param = "";

String urlArticle = "";

String urlList = "";

if(!searchValue.equals("")){

searchValue = URLEncoder.encode(searchValue, "UTF-8");

param = "&searchKey=" + searchKey;

param+= "&searchValue=" + searchValue;

}

urlList = cp + "/boardTest.do?method=list" + param;

urlArticle = cp + "/boardTest.do?method=article&pageNum=" + currentPage + param;

request.setAttribute("lists", lists);

request.setAttribute("urlArticle", urlArticle);

request.setAttribute("pageNum", currentPage);

request.setAttribute("pageIndexList", myUtil.pageIndexList(currentPage, totalPage, urlList));

request.setAttribute("totalDataCount", totalDataCount);

return mapping.findForward("list");

}


5-6 실행화면


▶주소창에서 mode값 주목

   mode=update : 수정



6. 게시물 삭제(delete)

○ 삭제의 시작 : 게시물(article.jsp)화면

○ 삭제는 따로 jsp파일이 필요 없음


6-1  boardTest_sqlMpa.xml 작성

<delete id="deleteData" parameterClass="int">

delete board where num=#num#

</delete>


6-2 BoardAction.java 작성

○ 필요한 값(num / pageNum / searchKey / searchValue)을 받아서 session에 넣어준다

   - session에 넣어주는 이유 : struts-config_boardTest.xml에서는 ${ }를 사용할 수 없기 때문

public ActionForward deleted(ActionMapping mapping, ActionForm form,

HttpServletRequest request, HttpServletResponse response) throws Exception {

CommonDAO dao = CommonDAOImpl.getInstance();

String cp = request.getContextPath();

int num = Integer.parseInt(request.getParameter("num"));

String pageNum = request.getParameter("pageNum");

String searchKey = request.getParameter("searchKey");

String searchValue = request.getParameter("searchValue");

dao.deleteData("boardTest.deleteData", num);

HttpSession session = request.getSession();

session.setAttribute("pageNum", pageNum);

session.setAttribute("searchKey", searchKey);

session.setAttribute("searchValue", searchValue);

return mapping.findForward("deleted_ok");

}


6-3 struts-config_boardTest.xml 추가

<action-mappings>

<action path="/boardTest" type="com.boardTest.BoardAction" name="boardTestForm" scope="request" parameter="method">

<forward name="created" path="/boardTest/created.jsp"/>

<forward name="created_ok" redirect="true" path="/boardTest.do?method=list"/>

<forward name="list" path="/boardTest/list.jsp"/>

<forward name="article" path="/boardTest/article.jsp"/>

<forward name="deleted_ok" redirect="true" path="/boardTest.do?method=list"/>

</action>

</action-mappings>


'STUDY > STRUTS' 카테고리의 다른 글

struts2를 이용한 간단한 데이터 전송  (0) 2019.03.22
Struct1 + iBatis 게시판(3)  (0) 2019.03.20
Struct1 + iBatis 게시판(2)  (0) 2019.03.20
Struct1 + iBatis 게시판(1)  (0) 2019.03.20
Struct 프로젝트 예제  (0) 2019.03.18

댓글