문제

동일한 모듈에 여러 개의 진입점이 있습니다.

예를 들어, 홈페이지의 홈 입력 지점과 관리자 페이지의 관리자 진입 지점이 있습니다.

<entry-point class='com.company.project.client.HomeModule'/> 
<entry-point class='com.company.project.client.AdminModule'/> 

내가 지금 설정하는 방식 - OnModuleload에서 이와 같은 Somt를 확인해야합니다.

if((RootPanel.get("someHomeWidget")!=null)&& 
  (RootPanel.get("someOtherHomeWidget")!=null)) 
{ 
  // do the stuff 
} 

홈페이지가 열리고 다른 방법으로 admin entrypoint가 실행되지 않도록합니다.

위의 점검을 수행하지 않으면 집과 관리 페이지 모두에 동일한 이름이있는 DIV가 있으면 주입하는 것이 각각에 두 번 나타납니다.

이것은 1000마일 떨어진 곳에서도 냄새가 나며 분명히 잘못된 것입니다.사람들의 경험에서 이것을하는 올바른 방법은 무엇입니까?

도움을 주시면 감사하겠습니다!

도움이 되었습니까?

해결책

올바른 방법은 모듈 당 단일 진입 점을 갖는 것입니다. 해당 DIV에 적절한 위젯을 고수합니다.

RootPanel panel = RootPanel.get("someHomeWidget");
if (panel) panel.add(new HomeWidget());

panel = RootPanel.get("adminWidget");
if (panel) panel.add(new AdminWidget());

이렇게하면 페이지를 검색하여 가지고있는 DIV를 찾아서 적절한 위젯을 삽입합니다. 따라서 HTML 페이지에서는 언제 표시되는 위젯이 결정되고 GWT 코드가 상황을 처리 할 준비가되어 있습니다. 위의 내용에 대해서는 악취가 없습니다. 진입 지점을 작성해야합니다.

대안은 관리 영역과 일반적으로 영역이 완전히 다른 경우 (예 : 별도의 시간에로드하려면) 별도의 진입 지점이있는 별도의 모듈이어야합니다.

다른 팁

나는 또한 GWT 장난감 앱에서 여러 페이지를 사용하고 싶었고 그것을 알아낸 것 같습니다.배포 설명자(myApp.gwt.xml)를 처리하는 데 약간의 시간이 걸렸지만 제가 수행한 작업은 다음과 같습니다.

  • EntryPoint를 구현하는 또 다른 클래스를 만들고 새 페이지에서만 div에 추가되는 일부 코드를 추가했습니다.
  • 원본 gwt.xml을 복사하고 두 가지를 변경했습니다.
    • 모듈 이름 바꾸기 - "anothergwtapp"으로 변경했습니다.
    • 진입점은 새 클래스를 지정했습니다.
  • 프로젝트를 컴파일할 때 "war" 폴더에 "anothergwtapp"이라는 (잠깐만 기다려 주세요.) 또 다른 디렉터리가 있습니다.여기에는 GWT 매직인 "anothergwtapp.nocache.js"가 포함되어 있습니다.
  • 마지막으로 원래 HTML 페이지를 복사하고 "stockwatcher/stockwatcher.nocache.js"를 "anothergwtapp/anothergwtapp.nocache.js"로 바꿨습니다. (예, 저는 아주 초보입니다. 튜토리얼은 아직 제 컴퓨터에 있습니다.)
    • 새 HTML을 약간 다르게 변경하고(새 진입점의 온로드를 채우기 위한 새 div) 첫 번째 페이지의 새 페이지에 간단한 href를 추가했습니다.

효과가 있었습니다.gwt.xml을 복제하고 새 앱 페이지와 함께 사용할 모듈의 새 이름을 제공하기만 하면 됩니다.다른 링크 중 일부를 살펴봤고 설명된 내용을 실제로 수행했을 수도 있지만 단어와 리디렉션 등이 너무 많았습니다(예:나는 실제로 아무것도 읽지 않았습니다).저는 Galileo용 최신 GWT 플러그인을 사용하고 있으므로 지금은 IJW일 수도 있습니다.

관리자와 홈페이지를 다른 페이지로 간주하지 마십시오. 단일 페이지 (즉, 단일 항목 점) 만 있기 때문에 페이지 개념은 GWT에 적용되지 않습니다. 다른 페이지의 효과를 주려면 GWT의 URL 재 작성 기능을 사용하십시오.

다른 입력 점을 사용하려면 위의 주석에서 말했듯이 다른 모듈을 사용하십시오.

일반적으로 하나의 EntryPoint 만있는 것이 좋습니다. 한 모듈의 여러 항목 점은 모두 동시에 시작되며 때로는 예상치 못한 일을 할 수 있습니다.

개별적으로 처리하는 방법에 대한 많은 옵션이 있습니다 .- 관리자 용으로 하나와 홈 응용 프로그램을위한 2 개의 다른 편집물이 있습니다. - 히스토리 토큰을 사용하여 관리자 또는 홈을 원한다는 것을 나타냅니다 - js 변수를 확인하여 하나 또는 다른 하나를 표시하려면 - 관리자 또는 홈을 표시하려면 특정 div id의 존재를 확인하십시오 (rootpanel.get (id)) - URL 매개 변수를 사용하십시오. 응용 프로그램을 표시합니다. - ... 등

이를 달성하는 간단한 (까다로운) 방법이 있습니다.

메인 클래스를 진입 점으로 만드십시오.

<module rename-to='gwt'>
  <inherits name='com.google.gwt.user.User'/>
  <entry-point class='com.example.client.Main'/>
  <source path='client'/>
  <source path='shared'/>
</module>;<br/>

이 main.java를 디스패처처럼 작동시킵니다.

package com.example.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;

public class Main implements EntryPoint {

  public void onModuleLoad() {

    String url = Window.Location.getHref();
    if ( url.indexOf("?install")>-1 ) {
      Install install = Install.getInstance();
      RootPanel.get().add(install);      
    else if ( url.indexOf("?admin")>-1 ) {
      Admin admin = Admin.getInstance();
      RootPanel.get().add(admin);    
    } else {
      Application app = Application.getInstance();
      RootPanel.get().add(app);      
    }
  }
}

이제 다른 클래스 애플리케이션, 관리 및 설치는 별도의 단위와 같은 작업입니다.

예를 들어 간단한 설치가 있습니다.

package comexample.client;

import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;

public class Install extends FlowPanel {

  /** Singleton stuff - to access Main from all subclasses! */
  private static Install singelton;
  public static Install getInstance() {
    if (singelton == null) {singelton = new Install();}
    return singelton;
  }

  /** Constructor - called by Main.onModuleLoad() */
  private Install() {
    this.add(new HTML("<h1>Do whatever You have to do!</h1>"));
  }
}

싱글 톤 물건 (getinstance)이 필요하지 않지만 큰 응용 프로그램에서는 매우 편리합니다.

이제 /War-Directory에서 Install and Admin이라는 이름의 디렉토리를 작성하고 바로 다음과 같은 HTML 페이지를 만듭니다.

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; URL=/index.html?install">
</head>
<body></body>
</html>

따라서 사용자가 자신의 브라아를 지시 할 때 http://www.example.com/install 그는 리디렉션 될 것이다 http://www.example.com/index?install index.html은 요청 및로드 install.java를 발송하는 main.java에 바인딩됩니다.

내 블로그에 이것에 대한 해결책이 있습니다. 여러 진입 지점이 있고 URL에 대한 사용을 사용하는 샘플 Maven 프로젝트를 다운로드 할 수 있습니다. 구경하다: http://zenoconsulting.wikidot.com/blog:16

이 프레임 워크를 아직 시도 했습니까?http://gwtmultipage.org/클라우디우스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top