2013-10-22 2 views
0

UserService를 사용하여 내 웹 앱에 로그인/로그 아웃 기능을 추가하려고합니다.GWT를 사용하여 로그인/로그 아웃 기능을 만드는 데 도움이 필요합니다.

public class MarkerSimple implements EntryPoint { 

    static LoginInfo loginInfo = null; 

    @Override 
    public void onModuleLoad() { 

     System.out.println("onModuleLoad"); 

    LoginServiceAsync loginService = GWT.create(LoginService.class); 
    loginService.login(GWT.getHostPageBaseURL(), new AsyncCallback<LoginInfo>() { 

     public void onFailure(Throwable error) { 
      System.out.println("ERROR FETChinG Data"); 
     } 

     public void onSuccess(LoginInfo result) { 

      System.out.println(result); 

     loginInfo = result; 
     if(loginInfo.isLoggedIn()) { 

      Constants.isLoggenIn = true; 
     } else { 

      Constants.isLoggenIn = false; 
     } 
     loadLogin(); 
     } 
     }); 
    } 

    private void loadLogin() { 

     RootLayoutPanel.get().add(new GwtMaps()); 
    } 
} 

2) 복합 클래스 : - - :

public class GwtMaps extends Composite { 

    interface LoginWidgetURLBinder extends UiBinder <DockLayoutPanel, GwtMaps> { } 
    private static LoginWidgetURLBinder uiBinder = GWT.create(LoginWidgetURLBinder.class); 

    private GoogleMap map; 
    int i=0; 

    static Boolean isLoaded = false; 

    @UiField 
    Label label1; 

    @UiField 
    RadioButton myRadioAble;  

    @UiField 
    SimpleLayoutPanel map_canvas; 

    @UiField 
    static Anchor signin; 


    public GwtMaps() { 

     System.out.println("GwtMaps"); 
     initWidget(uiBinder.createAndBindUi(this));  
     isLoaded = true; 
     anchorHandler(); 
     LatLng myLatLng = LatLng.create(28.60753,77.03505); 
     MapOptions myOptions = MapOptions.create(); 
     myOptions.setZoom(20.0); 
     myOptions.setCenter(myLatLng); 
     myOptions.setMapTypeId(MapTypeId.ROADMAP); 
     map = GoogleMap.create(map_canvas.getElement(), myOptions); 
     map.addClickListener(new ClickHandler() { 

      @Override 
      public void handle(MouseEvent event) { 
       i++; 
       addMarker(event.getLatLng()); 
      } 
     }); 



    } 

     private void addMarker(LatLng location) { 
      MarkerOptions newMarkerOpts = MarkerOptions.create(); 
      newMarkerOpts.setPosition(location); 
      newMarkerOpts.setMap(map); 
      newMarkerOpts.setTitle("Marker"+i); 
      newMarkerOpts.setDraggable(true); 
      newMarkerOpts.setAnimation(Animation.DROP); 
      Marker.create(newMarkerOpts); 
     } 

     public static void anchorHandler() { 

      if(Constants.isLoggenIn == false) { 

       signin.setText("SignIn using Google"); 
       signin.setHref(MarkerSimple.loginInfo.getLoginUrl()); 
      } else {     

       signin.setText("SignOut"); 
       signin.setHref(MarkerSimple.loginInfo.getLogoutUrl()); 
      }   
     } 
} 

이 문제는 사용자가 로그인하지 않은 경우

1) 진입 점 클래스 : 다음은 관련 코드입니다 로그인 후에도 앵커 다음에 RPC에서 수신 된 데이터는 캡처되지 않습니다. 또한 같은 앵커 로그 아웃 또는 로그인을 수행 할 수 있도록 로그인 또는 로그 아웃을 수행 한 후 동적으로 앵커를 변경하는 방법이 필요합니다. 나는 당신의 로그인 절차가 구성 될 때 정적 @UiField을 가질 수 있다고 생각하지 않습니다

답변

0
  1. 제발 도와주세요.

  2. 당신이 signIn.addClickHandler()를하고 로그인 메소드를 호출하는 곳을 알지 못하기 때문에 .ui.xml에 URL이 구성되어 있습니까?

  3. 모듈에서 로그인 호출을 이동하는 대신 addClickHandler 또는 @UiHandler ("signin")를 사용하여 앵커에서 호출 할 수 있습니다. 그리고 모듈이 뷰를로드하게 만듭니다. AsyncCallback 반환까지 ClickEvent를 일시 중지하도록 자신의 방법이

    public class MarkerSimple implements EntryPoint { 
        @Override 
        public void onModuleLoad() { 
         // Just this. 
         RootLayoutPanel.get().add(new GwtMaps()); 
        } 
    } 
    
+0

인가? event.wait()가 작동하지 않습니다. 로그인이 필요하거나 로그 아웃하면 작업을 일시 중지하고 시작할 수 있다면 작업을 완료 할 수 있습니다. – Dexter

+0

두 가지 해결책이 있습니다. "로그인"과 초기화 중 백그라운드에서 앵커의 텍스트를 초기화하는 것이 좋습니다. 사용자가 로그인했는지 확인하는 호출을합니다. 그런 경우 텍스트를 "로그 아웃"으로 변경할 수 있습니다. 이렇게하면 사용자가 변경 사항을 눈치 채지 못할 것입니다. 다른 옵션은 생성자에서 init 함수로 코드를 이동 한 다음 생성자가 사용자가 로그인했는지 확인하기 위해 호출 할 수 있습니다. 확인 후에 initWidget 및 기타 초기화 코드를 호출하는 initView를 호출 할 수 있습니다. –

+0

크리스. 고맙습니다. 로컬 호스트에서 로그인 할 때 로그인 기능이 제대로 작동하지 않지만 배치 후에 예상대로 작동합니다. 로컬 호스트에서 실행할 때 로그인 후 GWT 모듈 "앱 이름"을 다시 컴파일해야합니다. 아마도 무해한 버그 일 수 있습니다. – Dexter

관련 문제