글 수정하는 부분이 가장 구현하기 힘들었던 것 같습니다-_-;

구조는 수정버튼을 클릭했을 때에 id를 리턴받습니다. 그다음에 비밀번호를 입력받는 페이지로 이동합니다. 그 비밀번호를 입력해서 그 해당글의 비밀번호와 일치한지를 확인합니다.
일치하게 되면 수정하는 폼으로 이동합니다. 그 후 수정해서 글수정을 클릭하면 modifyAction을 통해 글을 수정하는 식으로 구현했습니다.


우선 글수정을 클릭했을 때 modifyConfirm.do를 실행합니다. 이것은 단순히 modifyConfirm.jsp를 실행합니다.
modifyConfirm.jsp를 보도록 합시다.

modifyConfirm.jsp
[code]
<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>
[/code]
여기서 볼 것은 id값도 넘겨줘야하기 때문에 hidden으로 id값을 처리해서 넘겨줍니다.
저기서도 value값을 그냥 id로 쓰면 안되더라구요. 그래서 getParameter메소드를 통해 넘겨줬습니다.
html:messages태그는 비밀번호가 틀리면 보여지게 되어있습니다.
여기서 확인버튼을 클릭하게 되면 modifyForm.do를 실행하게 됩니다.
modifyForm의 액션을 살펴봅시다.

struts-config.xml
[code]
<action path="/modifyForm"
                type="simpleboard.actions.modifyformAction"
                name="DynaForm"
                scope="request"
                input="/modifyConfirm.jsp">
            <forward name="success" path="/modifyForm.jsp"/>
 </action>
[/code]
modifyformAction을 수행하고 input으로 포워드하면 다시 modifyConfirm.jsp를 수행합니다.
성공으로 매핑하게 되면 modifyForm.jsp 즉 수정창으로 가는 겁니다.

modifyformAction클래스를 보도록 합시다.

modifyformAction.java
[code]
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();
        }
    }
}
[/code]
form에 있는 내용을 받아서 우선 dao의 CheckPwd를 이용해서 체크해서 비밀번호가 맞으면 현재보드내용을 찾아서 session에 저장 후 success로 포워드합니다.
비밀번호가 틀린경우에는 메시지를 추가해서 Input으로 포워드합니다.

성공했을 경우 modifyForm.jsp로 갑니다. 살펴봅시다.

modifyForm.jsp
[code]
<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">&nbsp;
        <html:text property="name" size="10"
                    maxlength="10" value="<%= name %>"/>
        </td>
        <td width="100" bgcolor="#7eaee9">비밀번호</td>
        <td width="120" align="left">&nbsp;
        <html:password property="pwd" size="10"
                        maxlength="10" value="<%= pwd %>"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">제 목</td>
        <td colspan="4" align="left">&nbsp;
        <html:text property="title" size="30"
                    maxlength="30" value="<%= title %>"/>
        </td>
    </tr>
    <tr>
        <td bgcolor="#7eaee9">내 용</td>
        <td colspan="4" align="left">&nbsp;
        <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>
[/code]
value에다가 값을 넣으려면 bean:define을 통해서 값을 정의해야합니다. 그 후에 jsp코드를 이용해서 value에 값을 넣어야지 값이 들어갑니다. 다른방법이 있을 것 같은데 이렇게 밖에 못하겠군요-_-;
form은 modify.do를 실행합니다. modifyAction을 실행합니다.
modifyAction은 writeAction과 거의 동일합니다. 그냥 글을 써서 등록하는 형식으로 하고 다른 점이 있다면 dao의 modify를 호출해서 update를 이용하고, insert는 insert sql문을 이용해서 합니다.

이렇게하면 수정하기가 끝이납니다.

오늘도 여기까지-_-;

 
Posted by 머드초보
,