글쓰기 부분입니다.

얘는 Form이 들어가서 살짝 복잡합니다-_-;












writeController를 보도록 합시다.
[code]
<bean id="guestbookWriteValidator"
  class="com.mudchobo.guestbook.logic.GuestbookWriteValidator" />
 
<bean id="writeController"
  class="com.mudchobo.guestbook.controller.WriteController">
  <property name="sessionForm" value="true" />
  <property name="commandName" value="guestbookWrite" />
  <property name="commandClass"
    value="com.mudchobo.guestbook.logic.GuestbookWrite" />
  <property name="validator" ref="guestbookWriteValidator" />
  <property name="formView" value="list" />
  <property name="successView" value="list.do" />
  <property name="guestbookManager">
   <ref bean="guestbookMan" />
  </property>
</bean>
[/code]
writeController를 보면 여러가지 property가 있습니다. 사실......-_-; 잘 모르겠습니다-_-;
commandClass는 GuestbookWrite클래스를 값으로 사용하는데 이 클래스는 지금 현재 폼에 input이 3개가 있습니다. 이름, 제목, 내용. 이 3가지를 GuestbookWrite라는 VO에 담으려고 쓰는 것 같습니다.
그리고 validator는 guestbookWriteValidator를 참조했는데 이것은 GuestbookWriteValidator라는 클래스입니다. 이걸 Validator로 쓰겠다는 겁니다. 이것은 값을 받았을 때 해당 폼의 input의 값이 ""이면 에러를 추가하도록 되어있습니다. 사실 이부분 구현하다 말았습니다-_-;(귀차나서-_-)

formView는 list, list.jsp를 말하는 것 같습니다. successView는 성공시에 list.do를 수행하라는 겁니다.
guestbookManager는 Manager클래스를 참조합니다. 참조해서 데이터를 넣어야 하기 때문이죠 ^^

자 이제 실질적으로 하는 Controller를 보도록 합시다.
[code]
protected ModelAndView onSubmit(HttpServletRequest request,
   HttpServletResponse response, Object command, BindException errors)
   throws Exception {
  GuestbookVO guestbookVO = new GuestbookVO();
 
  guestbookVO.setName(((GuestbookWrite)command).getName());
  guestbookVO.setSubject(((GuestbookWrite)command).getSubject());
  guestbookVO.setContent(((GuestbookWrite)command).getContent());
  guestbookVO.setIp(request.getRemoteAddr());
  guestbookVO.setDatetime(new Timestamp(System.currentTimeMillis()));
 
  guestbookManager.writeGuestbook(guestbookVO);
 
  return new ModelAndView(new RedirectView(getSuccessView()));
 }
[/code]
우선 form액션을 수행하는 Controller는 SimpleFormController를 상속받아요. onSubmit메소드를 오버라이드합니다. 폼을 채우고 글쓰기버튼을 눌렀을 때 write.do를 수행하는데 그것을 수행하게 되면 writeController를 수행합니다.
command를 GuestbookWrite형으로 형변환하는군요. 아....위에 commandClass가 이건거 같군요.
저렇게 하니까 getName 등의 getter를 사용할 수 있군요.
그것을 가져와서 guestbookVO setter에 넣습니다. ip주소나 시간은 따로 생성합니다.
writeGuestbook메소드를 호출하니 그냥 끝나는군요.
writeGuestbook메소드를 보도록합시다.
[code]
public void writeGuestbook(GuestbookVO guestbookVO) {
  jdbcTemplate = new JdbcTemplate(dataSource);
  String query = "INSERT INTO guestbook (name, subject, content, ip, datetime) " +
      "VALUES (?, ?, ?, ?, ?)";
 
  Object[] params = new Object[] { guestbookVO.getName(),
          guestbookVO.getSubject(),
          guestbookVO.getContent(),
          guestbookVO.getIp(),
          guestbookVO.getDatetime() };
 
  jdbcTemplate.update(query, params);
 }
[/code]
insert 쿼리를 만들고 5가지의 ?를 넣었네요. 거기에 Object를 생성해서 각각의 값을 불러와서 넣어주고 가볍게
update한번하니 끝나네요. 와 간단해요!

아.....아무도 안볼꺼지만 그래도 그나마 저의 삽질이 도움이 되시는 분이 한분이라도 계셨으면 좋겠네요 ^^

 
Posted by 머드초보

댓글을 달아 주세요

  1. 초보자 2008.03.07 15:14  댓글주소  수정/삭제  댓글쓰기

    프레임웍 초보입니다. 덕분에 많은 도움이 되었습니다. 고맙습니다. ^^)/

    • 머드초보 2008.03.07 19:28  댓글주소  수정/삭제

      좀 오래된 예제를 보고 만든거라 잘못된게 좀 많을 껍니다-_-;
      그래도 도움이 되셨다니 다행이네요 ^^

  2. 무지초보 2008.10.30 09:31  댓글주소  수정/삭제  댓글쓰기

    좋은정보 너무 감사드립니다.
    질문이 있는데.. java.lang.LinkageError : << 이런 애러가 났는데 뭔지 모르겠네요 ㅠ

    • 머드초보 2008.10.31 10:06  댓글주소  수정/삭제

      처음 보는 에러인데요.
      검색해보니 jdk의 경로가 잘못 잡혀있어서 그런 듯 합니다.
      구글신께 물어보시는 게 더 빠를듯합니다 ㅠㅠ