플렉스로 만들기는 했지만, 뭐 모든 클라이언트 플랫폼에서 쉽게 만들 수 있습니다.

요아래에 있는 RESTful Web Service를 구축하셨다면 그것을 이용한 클라이언트가 필요할 것입니다.

게시판용 RESTful WebService만들기
http://mudchobo.tomeii.com/tt/345
http://mudchobo.tomeii.com/tt/346

그래서 구현해봤습니다.
우선 5가지 요청을 합니다.

1. 게시물 리스트를 받아오는 것(GET)
2. 게시물 1개의 데이터를 받아오는 것(GET)
3. 게시물 쓰기(POST)
4. 게시물 삭제(DELETE)
5. 게시물 수정(PUT)

핵심은 RESTful요청이 가능한 라이브러리입니다. 요아래를 참고하세요~

[Flex/AIR] RESTful WebService를 위한 Flex RestService Library!


이 라이브러리를 통해 RESTService요청을 합니다. (기존 Flex에 있는 HTTPService는 DELETE와 PUT이 안됩니다.)
[code]
<rest:RESTService id="boardService" method="GET"
        rootURL="http://localhost/BoardWS/resources/wsboards/" port="9080"
        result="resultBoardHandler(event)" fault="faultHandler(event)"/>
[/code]
이런식으로 요청하면 되겠죠? ^^

아래는 구현체 소스입니다.
허접해서 도움이 될지는 모르겠지만....-_-; 어쨌든 저의 삽질의 결정체니....-_-;

저 위에서 구현한 WebService를 띄워놓고, 이 클라이언트로 접속하면 잘 될겁니다.

사용자 삽입 이미지

 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon AccessDenied 2008.10.16 16:15  댓글주소  수정/삭제  댓글쓰기

    역시 좀 짱이군 ㅎㅎㅎ

 
전시간에 이어서.....
이걸 좀 수정해봅시다.

우선 List를 받으려면 idx, 제목, 글쓴이의 정보가 필요합니다. 하지만, 기본적인 RESTful 웹서비스를 생성하게 되면 idx밖에 반환하지 않습니다. 이걸 고쳐봅시다.

boarddb.converter패키지에 WsboardsConverter클래스가 있습니다.
클래스 위에 XmlRootElement(name = "wsboards")라는 것이 붙어있습니다. 그렇습니다. 클래스형태가 바로 애노테이션 하나로 xml이 되버립니다-_-;(동작원리는 잘 모르겠네요-_-)
현재 데이터를 이런 식으로 반환합니다.
[code]<wsboards uri="http://localhost:9080/BoardWS2/resources/wsboards/">
    <wsboardRef uri="http://localhost:9080/BoardWS2/resources/wsboards/33/">
        <idx>33</idx>
    </wsboardRef>
[/code]
여기에 subject와 writer를 추가해봅시다.
wsboardRef쪽에다가 추가를 해야하니, WsboardRefConverter클래스를 봅시다.
@XmlRootElement(name = "wsboardRef")가 붙어있습니다. @XmlElement애노테이션을 붙이면 Element를 생성할 수 있습니다.
[code]@XmlElement
public String getWriter() {
    return entity.getWriter();
}
@XmlElement
public String getSubject() {
    return entity.getSubject();
}
[/code]
이렇게 2개를 추가했습니다. 그리고 게시판은 최근글이 마지막에 보여야하므로 쿼리를 수정합니다.
WsboardsResource클래스의 getEntities메소드를 봅시다.
쿼리를 아래와같이 수정합니다.
[code]SELECT e FROM Wsboard e ORDER BY e.idx DESC"[/code]
다시 테스트를 해봅시다.
이제 이렇게 나올겁니다.
[code]<wsboardRef uri="http://localhost:9080/BoardWS2/resources/wsboards/33/">
      <idx>33</idx>
      <subject>111</subject>
    <writer>11</writer>
</wsboardRef>[/code]
와우 List는 이제 구현이 다되었습니다-_-;

List를 가져올 때 총 게시물을 뽑아서 나중에 페이징을 할 때 사용해야합니다. 총게시물을 구하는 쿼리는
[code]SELECT count(e) FROM Wsboard e[/code]
이렇게 하면 되더군요.
그럼 WsboardsResource.java파일의 @GET부분을 다음과 같이 바꿉시다.
[code]try {
    Long count = (Long)PersistenceService.getInstance().createQuery("SELECT count(e) FROM Wsboard e").getSingleResult();
    return new WsboardsConverter(getEntities(start, max), context.getAbsolutePath(), count);
} finally {
    PersistenceService.getInstance().close();
}
[/code]
카운트값을 xml에 표기를 해야하니 WsboardsConverter를 수정해야겠죠?
[code]
private Long count; // 추가
public WsboardsConverter(Collection<Wsboard> entities, URI uri, Long count) {
        this.entities = entities;
        this.uri = uri;
        this.count = count;
    }
[/code]
count변수를 추가하고, 생성자를 저렇게 생성하도록 바꿉니다.
속성값으로 count를 추가해야겠죠?
[code]
@XmlAttribute(name = "count")
    public String getCount() {
        return count.toString();
    }
[/code]

이제 1개데이터 가져오기를 구현해봅시다. 사실.....이건 다 되어있군요. Test RESTful Web Service에서 {idx}에서 해당 idx를 넣고 Test눌렀을 때 정상적으로 나오면 된겁니다 ^^

이제 DELETE와 MODIFY 2개가 남았습니다.
DELETE를 구현하기 위해서는 db에 저장된 비밀번호와 입력한 비밀번호의 비교를 위해서 비밀번호를 받는 것을 하나 추가합시다. 저는 그냥 경로에 추가했습니다. 보안상 매우 안좋지만...-_-; 어떻게 하는지 몰라서-_-;

WsboardsResource.java파일에서 @Path("{idx}/") -> @Path("{idx}/{pwd}")로 바꿨습니다.
그리고, 1개의 PathParam을 받았던 것을 pwd도 받게 바꿨습니다. 그리고 WsboardResource클래스에 pwd를 추가하고, 생성자를 수정했습니다.

WsboardsResource.java파일
[code]@Path("{idx}/{pwd}")
public WsboardResource getWsboardResource(@PathParam("idx")
Integer id, @PathParam("pwd") String pwd) {  
    return new WsboardResource(id, pwd, context);
}
[/code]
WsboardResource.java파일
[code]private String pwd; //추가
public WsboardResource(Integer id, String pwd, UriInfo context) {
    this.id = id;
    this.pwd = pwd;
    this.context = context;
} // 생성자 수정
[/code]
이제 /wsboards/{idx}/{pwd}로 요청하면 idx와 pwd를 받을 수 있습니다.

DELETE를 수정해봅시다.
[code]@DELETE
public Response delete() {
    PersistenceService persistenceSvc = PersistenceService.getInstance();
    try {
        Wsboard entity = getEntity();
        if (entity.getPwd().equals(pwd)) {               
            persistenceSvc.beginTx();
            persistenceSvc.removeEntity(entity);
            persistenceSvc.commitTx();
            return Response.ok("success").build();
        }
    } finally {
        persistenceSvc.close();
    }
    return Response.ok("fail").build();
}
[/code]
간단합니다. 받은 pwd랑 현재 입력된 pwd랑 같은지 확인 후에 맞으면 지우고 success를 리턴하고, 틀리면 fail을 리턴합니다. 테스트를 해볼 수 있는데요. 한번 지워보시면
[code]Delete failed: Server returned --> Status: (200) Response: {success}
[/code]저는 이런 메시지를 받습니다. Delete failed라고 뜨는데요. 그래도 success라는 응답을 받고 db에서 보면 지워졌을 겁니다. 보면 DELETE는 뭔가 리턴을 하면 안되는 듯 합니다. 암튼...잘 되니...-_-;

이제 PUT을 수정해봅시다.
[code]@PUT
@ConsumeMime({"application/xml", "application/json"})
public Response put(WsboardConverter data) {
    PersistenceService persistenceSvc = PersistenceService.getInstance();
    try {
        Wsboard entity = getEntity();
        if (entity.getPwd().equals(pwd)) {
            persistenceSvc.beginTx();
            updateEntity(getEntity(), data.getEntity());
            persistenceSvc.commitTx();
            return Response.ok("success").build();
        }
    } finally {
        persistenceSvc.close();
    }
    return Response.ok("fail").build();
}
[/code]
이것도 그냥 pwd랑 같으면 수정시키고 success를 리턴하고, 틀리면 수정 안시키고 fail을 리턴합니다.
테스트해봅시다.
테스트할 때 주의사항이....xml로 데이터를 던져야 하는데요. idx빼고 모든 값이 다 들어가야합니다.
PUT으로 맞춰놓고, idx랑 pwd를 쓴 다음 content란에 이렇게 씁니다.
[code]<wsboard>
<pwd>1</pwd>
<writer>11</writer>
<subject>22</subject>
<content>33</content>
</wsboard>
[/code]
idx빼고 다 넣어야합니다. 그러면 업데이트가 됩니다.

아....다 됐네요. 아.....POST로 글쓰는 것을 빼먹고 안했는데요. 그냥 위처럼 XML로 넘겨주기만 하면 돼요 ^^
flex로 게시판 만드는 것도 해야하는데, 졸려서 내일로.....-_-;

내일은 선테크데이2008가야지-_-;

[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (1)


[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.

 
Posted by 머드초보

댓글을 달아 주세요

 
우선 저도 잘 모르는 상태에서 삽질을 한거라....잘못된 점 있으면 바로바로 태클을 걸어주세요~

우선 리스트데이터 가져오기.
resources/wsboards/ 형태로 요청을 하면 데이터를 가져옵니다.
WebService로 넘겨줘야할 값은 start값과 max값을 넘겨줘서 값을 가져옵니다. method는 GET입니다.

1개 게시물데이터 가져오기.
이것은 url로 resource/wsboards/{idx}/ 하면 해당 idx에 맞는 데이터를 가져옵니다. method는 GET입니다.

게시물 쓰기
resources/wsboards/로 xml형태의 글쓴이, 제목, 내용, 비밀번호 등의 정보를 보내줍니다. method는 POST입니다.

게시물수정
resources/wsboards/{idx}/{pwd}로 xml형태의 글쓴이, 제목, 내용, 비밀번호 등의 정보를 보내서 {pwd}랑 맞으면 수정합니다. method는 PUT입니다.

게시물삭제
resources/wsboards/{idx}/{pwd}로 요청해 pwd랑 서버에 있는 데이터pwd랑 비교해서 맞으면 삭제합니다. method는 DELETE입니다.

요렇게 5가지만 있으면 되겠군요.

저는 NetBeans6.1 + GlassFish V2 + MySQL 5.0에서 했습니다 ^^
우선 DB를 만듭시다. MySQL을 실행해서 해당 wsboard 테이블을 만듭니다.
[code]DROP TABLE IF EXISTS `mudchobo`.`wsboard`;
CREATE TABLE  `mudchobo`.`wsboard` (
  `idx` int(10) unsigned NOT NULL auto_increment,
  `writer` varchar(10) NOT NULL default 'writer',
  `pwd` varchar(10) NOT NULL default 'pwd',
  `subject` varchar(50) NOT NULL default 'subject',
  `content` text,
  PRIMARY KEY  (`idx`)
) ENGINE=InnoDB AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;
[/code]

1. 넷빈즈6.1을 실행합니다.

2. New Project -> Web -> Web Application -> Project Name은 BoardWS로.....
서버는 GlassFish V2로 합니다. (tomcat으로 해도 되는데, 테스트가 용이하지 않아요!). Finish!

3. 해당프로젝트에 New -> Entity Classs from Database -> Data Source 선택, New Data Source -> JNDI Name에는 jndi/board, Database Connection에는 New Database Connection선택, Name을 MySQL로 바꿔주고, 알맞게 셋팅합니다 ^^ 그리고 확인을 누르면 해당 database에 있는 모든 테이블을 가져옵니다. 이중에 우리가 만든 wsboard테이블을 선택하고 add합니다 ^^
pakage는 boarddb라고 합시다. 아래 Create Persistence Unit를 선택해서 걍 다 디폴트로 주고 Create합니다. (이건 Unit을 자동으로 생성해주는 것 같더군요. 즉, 사용자가 직접 만들 수도 있죠. 아직 저는 JPA를 모르니..ㅠ) Finish!

해당 객체가 만들어졌습니다. 소스를 보게 되면
[code]@Id
@Column(name = "idx", nullable = false)
private Integer idx;
@Column(name = "writer", nullable = false)
private String writer;
@Column(name = "pwd", nullable = false)
private String pwd;
@Column(name = "subject", nullable = false)
private String subject;
@Lob
@Column(name = "content")
private String content;
[/code]
속성값을 Column이랑 애노테이션을 이용해서 자동으로 매핑해주는군요. MySQL의 text타입은 Lob(Large Object랍니다)으로 되는군요^^
이제 이것을 이용한 웹서비스를 만들어봅시다.

4. 프로젝트에 New -> RESTful Web Services from Entity Classes선택. 방금 추가했던 Wsboard클래스가 있습니다. add하고, Package만 boarddb.service, boarddb.converter로 바꾸고 Finish.

service클래스는 잘 보면 PersistenceService랑 WsboardResource, WsboardsResource 3가지가 있네요. PersistenceService는 말그대로 Persistence단에서 하는 db관련된 내용이구요. entity를 가져오거나, 추가, 삭제, 수정 등을 할 수 있는 클래스입니다.
WsboardsResource는 @Path("/wsboards/")가 클래스 앞에 붙어있는데요. 아마 저 해당 URL로 접근하면 이 클래스가 대신하는 것 같습니다. 이 클래스 메소드에 @GET, @POST가 있는데, 저 url로 저 메소드를 접근하게 되면 해당 메소드를 실행하는 역할을 하게 됩니다. Wsboard도 위와 비슷합니다 ^^

5. 프로젝트메뉴에 Test RESTful Web Services를 선택하면 브라우저가 뜨고, 테스트를 할 수 있습니다.

사용자 삽입 이미지

글이 길어지네-_-; 해당 웹서비스 수정은 다음시간에.....-_-;

[JAVA] netbeans 초간단 게시판을 위한 RESTful WebService를 만들어봅시다-_-; (2)


[Flex/AIR] RESTful을 이용한 Web Service 게시판 클라이언트.


참고자료 http://www.netbeans.org/kb/60/websvc/rest-mysql.html
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon hhh 2009.10.15 13:19  댓글주소  수정/삭제  댓글쓰기

    연습
    <a> http://www.skuniv.ac.kr/ </a>
    연습 끝

 

아...계속 게시판만 만드네요-_-; 그래도 데이터연동의 가장 기본이 되는것을 해야하니깐-_-;

테스트환경은 TOMCAT6.0 + JDK 6.0 + Struts 1.3.8 + iBATIS 2.3.0 + Flex3 Beta 2 에서 했습니다.

저번엔 RemoteObject로 삽질했는데 이제 HTTPService로 삽질하네요.
우선 RemoteObject는 해당클래스를 직접 호출해서 가져다가 쓰는 것이구요.
HTTPService는 말그대로 http를 통해 주소값을 넣으면 그것을 실행하게 되는 것인데요.
그 실행해서 나오는 값이 xml형태이면 xml태그에 있는 값을 가져올 수 있습니다.

그렇다는 얘기는 서버단에서는 Struts와 iBATIS를 통해서 DB와 연동해서 데이터를 xml형태로 리턴해주면 그것을 FLEX에서 값을 가져다가 DataGrid에 넣든 쇼를 하든 할 수 있다는 얘기죠.

그리 대단한 건 아니지만, HTTPService로 삽질하시는 분들께 도움이 되고자-_-;

FlexBoard.war

Struts + iBATIS를 이용한 xml을 리턴하는 게시판입니다.

즉 http://localhost:8080/FlexBoard/list.do 을 실행하게 되면 결과값이 xml코드를 리턴한다는 얘기죠.
그런식으로 나타낸 xml코드를 flex에서 가져다가 DataGrid에 넣도록 되어있습니다.

ClientFlexBoard.zip

Flex Project Archive로 export한 프로젝트입니다.

이거는 저 위에 있는 FlexBoard.war에 포함되어있는 swf를 만들어주는 프로젝트입니다.
즉, 그냥 서버단에서 리턴하는 xml을 가져와서 DataGrid에 넣기도하고, http서비스를 이용하여 파라메터를 던져서 해당 DB를 컨트롤하기도 하고 그런거하는 겁니다.


DB구조는.....
CREATE TABLE `Board` (
  `b_id` int(11) NOT NULL auto_increment,
  `b_name` varchar(10) NOT NULL,
  `b_pwd` varchar(10) NOT NULL,
  `b_title` varchar(30) NOT NULL,
  `b_content` mediumtext NOT NULL,
  PRIMARY KEY  (`b_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=euckr AUTO_INCREMENT=115 ;
입니다-_-;

설명은 나중에-_-; 아.....졸려-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. 나그네 2007.11.19 17:24  댓글주소  수정/삭제  댓글쓰기

    iBatis 에서 자바빈을 통한 데이터전달 말고

    예를 들어 select 같은 경우에는 결과값을 바로

    ResultSet으로 받아올 수는 없을까요?

    Update 나 Insert 나 Delete 같은 경우는 그럼

    자바빈 없이 할려면

    필요값들을 어떻게 xml에 전달을 해야 될까요?


    답변 부탁드립니다. 예제가 있다면 더욱 감사하구요.

    koogoon@naver.com

    • BlogIcon 머드초보 2007.11.20 21:20  댓글주소  수정/삭제

      음....ResultSet으로 받으려는 이유가 궁금하네요 ^^
      친구한테 물어보니까 ResultClass를 java.util.Map으로 하면 받을 수 있다고 하네요.
      Map에서 get어쩌구 함수를 사용할 수 있다고 하네요
      저도 안해봐서 잘모르겠네요 ^^

  2. 초보 2008.01.17 00:53  댓글주소  수정/삭제  댓글쓰기

    금방 예제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 이후는 어덯게 될는지....의견듣고 싶네요.

    • BlogIcon 머드초보 2008.01.17 09:03  댓글주소  수정/삭제

      방금고쳤어요-_-; 아....제가 삽질하다가 DB를 날려먹어서 DB구조가 바뀌었네요^^
      이제 될껍니다.

      음 adobe가 java대신에 Action Script를 더욱 향상 시켜서 자바를 대처할 모양인가보네요.
      뭔가 가능할 것 같은데요 ^^

      Struts는 글쎄요. 제가 java로 현업을 뛰는게아니라서-_-;
      앞으로 더 좋은 프레임워크가 나오면서 Struts는 사라질 듯 해요.
      이미 많은 업체들이 Spring이라는 프레임워크로 옮긴 것처럼요 ^^

      결론은....끊임없는 공부입니다 ㅠㅠ

      좋은 의견 감사합니다 ^^

  3. BlogIcon 류승범 2008.01.23 02:07  댓글주소  수정/삭제  댓글쓰기

    우연히 들리게 되었습니다.

    Struts는 View Control이라할 수 있고 Spring은 Business Logic단이라고 알고 있습니다.
    여기다가 Hibernate를 추가하면 DB에 독립적으로 프로그램이 가능하고. Spring을 일본에서는 Caesar2 로 쓰이기도 합니다. Struts -> Spring으로 옮겨지는게 아니라, 다 같이 결합해서 쓰이게 되겠죠. Flex가 기능이 막강하긴 합니다만, 너무 무거워서 다소 하이브리드 형태로 JSF나 Applet, Component형태로 쓰일꺼 같은 생각이 듭니다.

    다소 개인적인 의견을 말씀드렸네요. 그럼 수고하세요.

    • BlogIcon 머드초보 2008.01.23 08:17  댓글주소  수정/삭제

      오 그렇군요^^
      좋은 의견감사해요^^ 다 같이 결합을 하는거군요.
      Flex가 좀 무겁긴해요^^ 앞으로 더욱 개선되겠죠?^^

  4. 석창호 2008.07.31 12:00  댓글주소  수정/삭제  댓글쓰기

    잘보고 갑니다~
    이제막 struts + ibatis + flex
    공부시작하는데.. 많은 도움이 되었네요~ ㅎㅎ
    근데... 위에 승범이도 왔었네.. ㅋㅋ 은근히 반갑다는 ㅋ

    • 머드초보 2008.07.31 13:12  댓글주소  수정/삭제

      앗! 안녕하세요!
      도움이 되셨다니 다행이네요.
      저거 제가 잘 모르던시절에 짠거라-_-;
      암튼 방문해주셔서 감사해요~

  5. 박영민 2008.09.26 17:15  댓글주소  수정/삭제  댓글쓰기

    안녕하세요..플렉스를 막 시작한 초보입니다.
    소스를 임포트하여
    톰캣, mysql 환경에서 게시판을 돌렸는데

    org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Communications link failure

    이런 메세지가 뜨네요...해결 방법을 알수 있을까요?

    • 머드초보 2008.09.26 18:20  댓글주소  수정/삭제

      안녕하세요~
      그건 저도 잘모르겠네요 ㅠ
      검색해보니 MySQL연결이 끊어졌다라고만 얘기가 나옵니다만-_-;
      MySQL의 설정을 조금 바꿔보세요 ^^
      dbms는 저도 잘몰라서 ㅠ

  6. 박영민 2008.10.07 12:02  댓글주소  수정/삭제  댓글쓰기

    안녕하세여....^^ 올려주신 소스 감사합니다.

    소스를 임포트하여 톰캣, 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태그 라이브러리도 확인해봤구여.....

    왜 그런건지 알수 있을까여?^^

    • 머드초보 2008.10.07 13:43  댓글주소  수정/삭제

      ${}이것은 el표기법이라고 해서 jsp에서 사용하는 문법입니다.
      근데 8080인것으로 봐서 톰캣으로 돌리신게 맞는것같은데-_-;
      왜 안되죠?-_-;
      저 코드가 왜 그냥 나오지-_-; 저...저도 잘모르겠네요-_-;
      환경을 직접 봐야지 알 것 같아요 ^^

  7. 공대아름 2008.12.03 17:27  댓글주소  수정/삭제  댓글쓰기

    올려주신 자료 감사하게 보고 있습니다.^^*
    근데 저도 위에 님하고 같은 현상이 일어나네요...
    <?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} 으로 나옵니다.
    이유가 뭘까요??? 오늘도 삽질에 삽질입니다...ㅜㅜ

    • 머드초보 2008.12.04 18:39  댓글주소  수정/삭제

      음......이상하네요.
      톰캣에서 돌리시는 거 맞죠?
      저도 왜그런지 모르겠네요 ㅠㅠ
      저건 톰캣에서 제공하는 걸로 알고있는데 ㅠ

  8. 장건웅 2009.04.20 16:43  댓글주소  수정/삭제  댓글쓰기

    요즘 플렉스에 관심이 생겨 이것저것 검색하다가 머드초보님 블로그까지 오게 되었습니다.
    여러가지 많이 배우고 가네요~ 자료 정말 감사드립니다.
    위에 분들 el태그가 그대로 출력되는 현상 해결하셨을지 모르지만 일단 해결책을 올려드리려구요.
    <%@ page isELIgnored="false" contentType="text/xml; charset=UTF-8" %>
    isElIgnored="false"를 추가해 주시면 el태그를 사용하실 수 있으실 겁니다.

    • 머드초보 2009.04.23 23:49  댓글주소  수정/삭제

      앗! 답변 달아주셔서 감사합니다 ㅠ
      윗분 4달전에 올리신 질문을 ㅠ
      감사합니다 ^^

  9. BlogIcon 쟝또루푸 2009.04.27 17:22  댓글주소  수정/삭제  댓글쓰기

    웹개발에 뛰어든지 4개월째 근무하는 곳에서 기획중인 웹서비스에 주 View단이 플렉스로 정해져 공부를 시작한 나그네 입니다..^ㅡ^... 다른 무엇 보다 머드초보님께서 정리해서 올려주신 게시판 소스가 너무 큰 도움이 되는 듯 합니다 ㅠ_ㅠ... 아직 버닝을 시작하진 않았지만 듬직하네요'ㅡ'/ 멋져요^0^/

    • 머드초보 2009.04.27 23:57  댓글주소  수정/삭제

      아.....안녕하세요~
      저 허접한 소스를...-_-
      벌써 1년도 더 된....ㅠㅠ
      그냥 참조만 해주세요 ㅠ
      방문해주셔서 감사해요~ ^^

  10. 이관형 2010.03.29 14:54  댓글주소  수정/삭제  댓글쓰기

    FLEX관련 자료를 찾다가 들르게됐네여~
    자료 감사합니다~
    게시판돌려봤는데여~도무지 FLEX의 데이터를 다룰방법을 모르겠었는데
    많은 도움이되네요~
    좋은자료 감사합니다~^^
    글와중에
    <?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>
    라고나오신분들은 Table에 데이타가 없을경우 나네요~
    데이타를 집어넣어주면 에러는 발생하지 않습니다~

    암튼 좋은 자료 감사해요~

 

마지막입니다. 글 삭제하기 기능입니다.

이것도 글 수정하는 거랑 원리가 비슷합니다. 글삭제버튼을 누르게 되면 비밀번호를 입력하라고 나오는데 입력해서 맞으면 삭제하는 식입니다.






글삭제를 누르면 deleteForm.do를 실행합니다. 이것은 deleteForm.jsp를 실행합니다.

[code]
<html:form action="delete" 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>
</html:form>
[/code]
pwd를 입력받고 id는 파라메터로 받은 것을 delete.do에 넘겨줍니다.
delete.do를 수행하는 action태그를 보도록 합시다.

struts-config.xml
[code]
<action path="/delete"
                type="simpleboard.actions.deleteAction"
                name="DynaForm"
                scope="request"
                validate="true"
                input="/deleteForm.jsp">
</action>
[/code]

deleteAction을 수행하며 비밀번호가 맞으면 자바스크립트를 통해 삭제가 성공했다는 메시지를 띄우고 틀리면 deleteForm.jsp를 다시 실행합니다.
deleteAction을 보도록 합시다.

deleteAction.java
[code]
public class deleteAction extends Action{
    public ActionForward execute(   ActionMapping mapping,
            ActionForm form,
            HttpServletRequest request,
            HttpServletResponse response) throws Exception{
       
        DynaActionForm deleteForm = (DynaActionForm)form;
        BoardDAO dao = new BoardDAO();
        ActionMessages errors = new ActionMessages();
       
        int id = (Integer)deleteForm.get("id");
        String pwd = (String)deleteForm.get("pwd");
        if (dao.CheckPwd(id, pwd)) {
            dao.Delete(id);
            response.setContentType("text/html; charset=euc-kr");
            PrintWriter out = response.getWriter();
            out.println("<script language='javascript'>"); 
            out.println("alert('글이 삭제되었습니다.');");
            out.println("location.href = \"list.do\";");
            out.println("</script>");
            return null;
        }
        else {
            errors.add("invalidPwd",new ActionMessage("error.pwd.invalid"));
            saveErrors(request,errors);
            return mapping.getInputForward();
        }  
    }
}
[/code]
id와 pwd를 받고, CheckPwd를 통해서 비밀번호를 체크후에 맞으면 dao의 Delete메소드를 수행한뒤 자바스크립트로 삭제되었다는 메시지를 띄운뒤 list.do로 이동합니다.
비밀번호가 틀리면 에러메시지를 추가해서 input으로 포워드합니다.

자 이제 끝났습니다.
혼자서 삽질한 느낌이 드는군요.
단 한분이라도 도움이 되었으면 좋겠습니다.

스트럿츠로 제작한 게시판 소스입니다.
 
Posted by 머드초보

댓글을 달아 주세요

  1. 초보 2008.04.10 19:05  댓글주소  수정/삭제  댓글쓰기

    머드초보님홈피에서 소스코드의 표시효과에 관하여 질문드립니다.
    어덯게 하면 홈페지에 EDIT Tools처럼 번호달린 소스표시가 되는지요.

    그럼 잘 부탁드립니다.

    • 머드초보 2008.04.11 08:29  댓글주소  수정/삭제

      아네 안녕하세요 ^^
      텍스트큐브 플러그인인데요 ^^
      코드하이라이트라는 플러그인을 설치하시면 돼요 ^^
      http://gendoh.tistory.com/2510954

  2. 초보 2008.04.11 16:49  댓글주소  수정/삭제  댓글쓰기

    답변 감사합니다. ^^

  3. 유리망치 2009.04.02 16:17  댓글주소  수정/삭제  댓글쓰기

    플렉스가 아직 먼지도 모르는 초보입니다.
    참고 많이 할게요
    퍼가여

    • 머드초보 2009.04.03 23:11  댓글주소  수정/삭제

      반갑습니다^^
      저도 아직은 플렉스초보라 ^^
      근데 이 글은 Struts자료군요-_-;