글 수정하는 부분이 가장 구현하기 힘들었던 것 같습니다-_-;
구조는 수정버튼을 클릭했을 때에 id를 리턴받습니다. 그다음에 비밀번호를 입력받는 페이지로 이동합니다. 그 비밀번호를 입력해서 그 해당글의 비밀번호와 일치한지를 확인합니다.
일치하게 되면 수정하는 폼으로 이동합니다. 그 후 수정해서 글수정을 클릭하면 modifyAction을 통해 글을 수정하는 식으로 구현했습니다.
우선 글수정을 클릭했을 때 modifyConfirm.do를 실행합니다. 이것은 단순히 modifyConfirm.jsp를 실행합니다.
modifyConfirm.jsp를 보도록 합시다.
modifyConfirm.jsp
<html:form action="modifyForm" method="POST" focus="pwd">
<table border="1" width="250">
<tr bgcolor="#7eaee9">
<td>게시물의 비밀번호를 입력하세요.</td>
</tr>
<tr>
<td>
<html:password property="pwd"/>
<html:hidden property="id" value="<%= request.getParameter("id") %>"/>
<html:submit value="확인"/>
</td>
</tr>
<tr>
<td>
<html:messages id="msg" property="invalidPwd">
<bean:write name="msg"/>
</html:messages>
</td>
</tr>
</table>
여기서 볼 것은 id값도 넘겨줘야하기 때문에 hidden으로 id값을 처리해서 넘겨줍니다.
저기서도 value값을 그냥 id로 쓰면 안되더라구요. 그래서 getParameter메소드를 통해 넘겨줬습니다.
html:messages태그는 비밀번호가 틀리면 보여지게 되어있습니다.
여기서 확인버튼을 클릭하게 되면 modifyForm.do를 실행하게 됩니다.
modifyForm의 액션을 살펴봅시다.
struts-config.xml
<action path="/modifyForm"
type="simpleboard.actions.modifyformAction"
name="DynaForm"
scope="request"
input="/modifyConfirm.jsp">
<forward name="success" path="/modifyForm.jsp"/>
</action>
modifyformAction을 수행하고 input으로 포워드하면 다시 modifyConfirm.jsp를 수행합니다.
성공으로 매핑하게 되면 modifyForm.jsp 즉 수정창으로 가는 겁니다.
modifyformAction클래스를 보도록 합시다.
modifyformAction.java
public class modifyformAction extends Action {
public ActionForward execute( ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) throws Exception{
DynaActionForm modifyconfirmForm = (DynaActionForm)form;
ActionMessages errors = new ActionMessages();
Board board = new Board();
BoardDAO dao = new BoardDAO();
HttpSession session = request.getSession();
int id = (Integer)modifyconfirmForm.get("id");
String pwd = (String)modifyconfirmForm.get("pwd");
if (dao.CheckPwd(id, pwd)) {
board = dao.findBoard(id);
session.setAttribute("board", board);
return mapping.findForward("success");
}
else {
errors.add("invalidPwd",new ActionMessage("error.pwd.invalid"));
saveErrors(request,errors);
return mapping.getInputForward();
}
}
}
form에 있는 내용을 받아서 우선 dao의 CheckPwd를 이용해서 체크해서 비밀번호가 맞으면 현재보드내용을 찾아서 session에 저장 후 success로 포워드합니다.
비밀번호가 틀린경우에는 메시지를 추가해서 Input으로 포워드합니다.
성공했을 경우 modifyForm.jsp로 갑니다. 살펴봅시다.
modifyForm.jsp
<bean:define id="id" name="board" property="id" type="java.lang.Integer"/>
<bean:define id="name" name="board" property="name" type="java.lang.String"/>
<bean:define id="pwd" name="board" property="pwd" type="java.lang.String"/>
<bean:define id="title" name="board" property="title" type="java.lang.String"/>
<bean:define id="content" name="board" property="content" type="java.lang.String"/>
<html:form action="modify" method="POST" focus="name">
<html:hidden property="id" value="<%= id.toString() %>"/>
<table width="500" border="1">
<tr>
<td width="100" bgcolor="#7eaee9">등 록 자</td>
<td width="180" align="left">
<html:text property="name" size="10"
maxlength="10" value="<%= name %>"/>
</td>
<td width="100" bgcolor="#7eaee9">비밀번호</td>
<td width="120" align="left">
<html:password property="pwd" size="10"
maxlength="10" value="<%= pwd %>"/>
</td>
</tr>
<tr>
<td bgcolor="#7eaee9">제 목</td>
<td colspan="4" align="left">
<html:text property="title" size="30"
maxlength="30" value="<%= title %>"/>
</td>
</tr>
<tr>
<td bgcolor="#7eaee9">내 용</td>
<td colspan="4" align="left">
<html:textarea property="content"
cols="53" rows="10" value="<%= content %>"/>
</td>
</tr>
<tr>
<td colspan="4"><font color="red"><b>
<html:messages id="msg" property="requiredName">
<bean:write name="msg"/><br>
</html:messages>
<html:messages id="msg" property="requiredPwd">
<bean:write name="msg"/><br>
</html:messages>
<html:messages id="msg" property="requiredTitle">
<bean:write name="msg"/><br>
</html:messages>
<html:messages id="msg" property="requiredContent">
<bean:write name="msg"/><br>
</html:messages></b></font>
</td>
</tr>
<tr>
<td colspan="4"><html:submit value="내용수정"/></td>
</tr>
</table>
</html:form>
value에다가 값을 넣으려면 bean:define을 통해서 값을 정의해야합니다. 그 후에 jsp코드를 이용해서 value에 값을 넣어야지 값이 들어갑니다. 다른방법이 있을 것 같은데 이렇게 밖에 못하겠군요-_-;
form은 modify.do를 실행합니다. modifyAction을 실행합니다.
modifyAction은 writeAction과 거의 동일합니다. 그냥 글을 써서 등록하는 형식으로 하고 다른 점이 있다면 dao의 modify를 호출해서 update를 이용하고, insert는 insert sql문을 이용해서 합니다.
이렇게하면 수정하기가 끝이납니다.
오늘도 여기까지-_-;
Trackback URL : http://mudchobo.tomeii.com/tt/trackback/53
당신의 의견을 작성해 주세요.
iBatis 에서 자바빈을 통한 데이터전달 말고
예를 들어 select 같은 경우에는 결과값을 바로
ResultSet으로 받아올 수는 없을까요?
Update 나 Insert 나 Delete 같은 경우는 그럼
자바빈 없이 할려면
필요값들을 어떻게 xml에 전달을 해야 될까요?
답변 부탁드립니다. 예제가 있다면 더욱 감사하구요.
koogoon@naver.com
음....ResultSet으로 받으려는 이유가 궁금하네요 ^^
친구한테 물어보니까 ResultClass를 java.util.Map으로 하면 받을 수 있다고 하네요.
Map에서 get어쩌구 함수를 사용할 수 있다고 하네요
저도 안해봐서 잘모르겠네요 ^^
금방 예제http://mudchobo.tomeii.com/FlexBoard/에서 글쓰기가 안되네요...?
faultCode:Server.Error.Request faultString:'HTTP request error' faultDetail:'Error: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: 流错误。 URL: http://mudchobo.tomeii.com/FlexBoard/write.do"]. URL: http://mudchobo.tomeii.com/FlexBoard/write.do'
위와 같은 에러가 나옴니다.
그리고 지금은 개발언어로 JAVA를 메인으로 하지만,
곧 Flash가 JAVA자리를 차지한다는 소문이 있는데요.
머드초보님은 이방면에서 어덯게 생각하는지요...
Struts 이후는 어덯게 될는지....의견듣고 싶네요.
방금고쳤어요-_-; 아....제가 삽질하다가 DB를 날려먹어서 DB구조가 바뀌었네요^^
이제 될껍니다.
음 adobe가 java대신에 Action Script를 더욱 향상 시켜서 자바를 대처할 모양인가보네요.
뭔가 가능할 것 같은데요 ^^
Struts는 글쎄요. 제가 java로 현업을 뛰는게아니라서-_-;
앞으로 더 좋은 프레임워크가 나오면서 Struts는 사라질 듯 해요.
이미 많은 업체들이 Spring이라는 프레임워크로 옮긴 것처럼요 ^^
결론은....끊임없는 공부입니다 ㅠㅠ
좋은 의견 감사합니다 ^^
우연히 들리게 되었습니다.
Struts는 View Control이라할 수 있고 Spring은 Business Logic단이라고 알고 있습니다.
여기다가 Hibernate를 추가하면 DB에 독립적으로 프로그램이 가능하고. Spring을 일본에서는 Caesar2 로 쓰이기도 합니다. Struts -> Spring으로 옮겨지는게 아니라, 다 같이 결합해서 쓰이게 되겠죠. Flex가 기능이 막강하긴 합니다만, 너무 무거워서 다소 하이브리드 형태로 JSF나 Applet, Component형태로 쓰일꺼 같은 생각이 듭니다.
다소 개인적인 의견을 말씀드렸네요. 그럼 수고하세요.
오 그렇군요^^
좋은 의견감사해요^^ 다 같이 결합을 하는거군요.
Flex가 좀 무겁긴해요^^ 앞으로 더욱 개선되겠죠?^^
잘보고 갑니다~
이제막 struts + ibatis + flex
공부시작하는데.. 많은 도움이 되었네요~ ㅎㅎ
근데... 위에 승범이도 왔었네.. ㅋㅋ 은근히 반갑다는 ㅋ
앗! 안녕하세요!
도움이 되셨다니 다행이네요.
저거 제가 잘 모르던시절에 짠거라-_-;
암튼 방문해주셔서 감사해요~
안녕하세요..플렉스를 막 시작한 초보입니다.
소스를 임포트하여
톰캣, mysql 환경에서 게시판을 돌렸는데
org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure
이런 메세지가 뜨네요...해결 방법을 알수 있을까요?
안녕하세요~
그건 저도 잘모르겠네요 ㅠ
검색해보니 MySQL연결이 끊어졌다라고만 얘기가 나옵니다만-_-;
MySQL의 설정을 조금 바꿔보세요 ^^
dbms는 저도 잘몰라서 ㅠ
안녕하세여....^^ 올려주신 소스 감사합니다.
소스를 임포트하여 톰캣, mysql 환경에서 게시판을 돌렸는데
list.do에서 디비에서 갖고온 데이터를 xml로 변환을 못한 듯 합니다.
http://localhost:8080/FlexBoard/list.do 이렇게 페이지를 열러보면
<?xml version="1.0" encoding="UTF-8" ?>
- <result_set>
<pagenum>${pagenum}</pagenum>
<totalpage>${totalpage}</totalpage>
- <record>
<id>${list.id}</id>
<name>${list.name}</name>
<title>${list.title}</title>
<content>${list.content}</content>
</record>
</result_set>
이런식으로 나오고 맙니다...
http://localhost:8080/FlexBoard/ClientFlexBoard.swf를 보면
게시판의 번호,이름,제목란에 데이터 대신 ${list.id}, ${list.title},${list.content} 으로 나옵니다.
물론 디버깅해서 데이타를 갖고 오는건 확인했습니다만..list.do에서 데이터를 볼 수가 없네여. write는 되는것을 확인했구여.
그리고 jstl태그 라이브러리도 확인해봤구여.....
왜 그런건지 알수 있을까여?^^
${}이것은 el표기법이라고 해서 jsp에서 사용하는 문법입니다.
근데 8080인것으로 봐서 톰캣으로 돌리신게 맞는것같은데-_-;
왜 안되죠?-_-;
저 코드가 왜 그냥 나오지-_-; 저...저도 잘모르겠네요-_-;
환경을 직접 봐야지 알 것 같아요 ^^
올려주신 자료 감사하게 보고 있습니다.^^*
근데 저도 위에 님하고 같은 현상이 일어나네요...
<?xml version="1.0" encoding="UTF-8" ?>
- <result_set>
<pagenum>${pagenum}</pagenum>
<totalpage>${totalpage}</totalpage>
- <record>
<id>${list.id}</id>
<name>${list.name}</name>
<title>${list.title}</title>
<content>${list.content}</content>
</record>
</result_set>
게시판의 번호,이름,제목란에 데이터 대신 ${list.id}, ${list.title},${list.content} 으로 나옵니다.
이유가 뭘까요??? 오늘도 삽질에 삽질입니다...ㅜㅜ
음......이상하네요.
톰캣에서 돌리시는 거 맞죠?
저도 왜그런지 모르겠네요 ㅠㅠ
저건 톰캣에서 제공하는 걸로 알고있는데 ㅠ
요즘 플렉스에 관심이 생겨 이것저것 검색하다가 머드초보님 블로그까지 오게 되었습니다.
여러가지 많이 배우고 가네요~ 자료 정말 감사드립니다.
위에 분들 el태그가 그대로 출력되는 현상 해결하셨을지 모르지만 일단 해결책을 올려드리려구요.
<%@ page isELIgnored="false" contentType="text/xml; charset=UTF-8" %>
isElIgnored="false"를 추가해 주시면 el태그를 사용하실 수 있으실 겁니다.
앗! 답변 달아주셔서 감사합니다 ㅠ
윗분 4달전에 올리신 질문을 ㅠ
감사합니다 ^^
웹개발에 뛰어든지 4개월째 근무하는 곳에서 기획중인 웹서비스에 주 View단이 플렉스로 정해져 공부를 시작한 나그네 입니다..^ㅡ^... 다른 무엇 보다 머드초보님께서 정리해서 올려주신 게시판 소스가 너무 큰 도움이 되는 듯 합니다 ㅠ_ㅠ... 아직 버닝을 시작하진 않았지만 듬직하네요'ㅡ'/ 멋져요^0^/
아.....안녕하세요~
저 허접한 소스를...-_-
벌써 1년도 더 된....ㅠㅠ
그냥 참조만 해주세요 ㅠ
방문해주셔서 감사해요~ ^^