2010-11-19 9 views
0

임이 새로운 기술에 대해,하지만 새로운 개체 (HTML 요소, div/span/등등 ...)를 dinamically 서버에 생성하고 클라이언트에게 보낼 수 있는지 알고 싶습니다. 내가 응용 프로그램에서 개발할 때 클라이언트 측에서 만들어진 것을로드 할 수 있습니다. 내가 얻을 수있는 (예 경우) 몇 가지 물건/예/자습서이 작업을 수행 할 수GWT - 서버에서 새 HTML 요소를 만들 수 있습니까? 아니면 클라이언트에로드 된 HTML 요소를 업데이트 할 수 있습니까?

나는 (내가 그 섬세한 인수를 생각한다)을하는 방법에 대해 물어,하지만 내가 할 수있는 경우와하지 않습니다.

내가 일반적으로 할 무엇 :

... 
public void onSuccess(Boolean result) { 
    if(result) { 
     myFunction(); 
    } 
} 

... 

myFunction() { 
    InlineLabel label=new InlineLabel(); 
    this.add(label)  
} 

어떤 메신저를 찾고 : 그래서

... 
public void onSuccess(InlineLabel result) { 
    this.add(result) 
} 

, 나는 사전 개체에로드 할 필요하지 않지만 일부 버튼을 클릭하거나 (또는 ​​작업을 수행하는 경우에만)로드하십시오. 이렇게하면 많은 양의 코드 (즉, 아무런 조치도 취하지 않으면 inutil)가 클라이언트에서 JavaScript로로드됩니다.

평상시와 같이 시간을내어 주셔서 감사합니다.

답변

1

은 내가 당신의 질문을 이해하지만 질문을 수정하거나 내가 마크를 놓친 경우 댓글을 게시 할 수 주시기 바랍니다 완전히 확실하지 않다.

호스트 페이지

GWT 애플리케이션은 다음 (간체) 과정에서로드 : 호스트 페이지 (HTML)는 부트 스트랩 스크립트가

  • 로드
  • 로드

    • 컴파일 된 응용 프로그램 스크립트는

    이 호스트 페이지는 원하는 HTML을 포함 할 수로드됩니다. 유일한 요구 사항은 GWT 부트 스트랩 스크립트를로드하는 <script> 요소를 포함하는 것입니다. 그 결과

    , 서버가 당신이 좋아하는 모든 서버에서 생성 된 마크 업을 포함하는 페이지를 반환 할 수 있습니다.

    서버 렌더링

    앱이 실행되면, 서버에서 임의의 데이터를 검색하는 코드에서 비동기 요청을 보낼 수 있습니다 런타임

    에서 HTML. 하나의 옵션은 서버 생성 HTML을 검색하여 응용 프로그램에 삽입하는 것입니다.

    이 옵션의 경우 HTML widget을 인스턴스화 한 다음 setHTML 메소드를 사용하여 위젯에 서버 생성 마크 업을 삽입합니다.

    클라이언트 생성 대안으로

    을, 당신은 GWT의 RPC를 통해 서버에서 구조화 된 데이터를 검색 할 수 있습니다. Java 기반 서버에서 생성 된 객체는 서버의 GWT에 의해 직렬화되고 클라이언트에서 역 직렬화되어 일반 객체로 다시 생성됩니다. 그런 다음 접근 자 메서드 (getName, getId 등)를 사용하여 이러한 객체에서 데이터를 가져올 수 있습니다.이 시점에서, 당신은 몇 가지 옵션이 있습니다 :

    • 은 다음 HTML 위젯 setHTML를 사용 StringBuilder를 사용하여 일부 HTML 등을 생성합니다.
    • DOM class을 사용하여 DOM 요소 생성
    • 데이터를 위젯으로 설정하고 패널이나 루트 패널에 추가하십시오.
  • +0

    음 ... 너의 설명은 우스워 보인다. 그러나 이것은 표준 "HTML 작성 및 게시"입니다. GTW 위젯 UI를 조작하고 InlayLabel() (span), FlowPanel (div), Image() ()와 같이 GWT 변환 후 보내십시오. 가능한가? 아니면 "나 자신이 작성한 HTML"서버 측으로 보낼 수 있습니까? – markzzz

    +0

    아 그 가능성 :) 당신은 나에게 이것의 작은 예를 줄 수 있니? 예를 들어 비동기 호출 후 서버에서 새 InlayLabel()을 추가하면 클라이언트 측에서 onSuccess 함수가로드 될 때 추가됩니다. – markzzz

    +0

    나는 실수를하는 것이 두려워요. GWT RPC를 통해 전송되어야하는 것은 모두'IsSerializable'을 구현해야하며, 많은 위젯들은 구현되지 않습니다. 'IsSerializable' 또는'Serializable'을 구현하는 클래스를 찾아 서버로부터 보낼 수 있는지를 결정하십시오. 이 경우 클라이언트에서 위젯을 만드는 데 필요한 모든 정보를 포함하는 직렬화 가능 클래스를 만든 다음 클라이언트에서이 위젯을로드하고 대신 추가 할 것을 권장합니다. http://code.google.com/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideSerializableTypes – Wesley

    2
    GWT 당신이 보여 패턴을 지원하지 않습니다,하지만 당신은 "코드 분할"와 유사한 효과를 얻을 수

    : 코드 분할로 http://code.google.com/webtoolkit/doc/latest/DevGuideCodeSplitting.html

    읽기, 클라이언트는 단지 그것을 즉시 필요로하는 스크립트를 다운로드 (구성 개발자에 의해). 예를 들어, 사용자가 위젯을 더 필요로하는보다 복잡한 UI 영역으로 이동하면 추가 코드가 다운로드됩니다.

    +0

    음 ... 좋은 해결책 :) 이것은 inutil 코드의 거대한 행을 안전하게 다운로드 할 것입니다. 나는 기사를 읽었지만 명확하지 않습니다. 그것은 "한계"(Iframe 링커?) – markzzz

    +1

    기본 링커를 사용하고 있다면 문제가 없습니다. –

    +0

    하지만 메인 자바 링커 (라이브러리/etc를 관리하는 사람)에게 리팩토링합니까? – markzzz

    관련 문제