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을 가질 수 있다고 생각하지 않습니다
인가? event.wait()가 작동하지 않습니다. 로그인이 필요하거나 로그 아웃하면 작업을 일시 중지하고 시작할 수 있다면 작업을 완료 할 수 있습니다. – Dexter
두 가지 해결책이 있습니다. "로그인"과 초기화 중 백그라운드에서 앵커의 텍스트를 초기화하는 것이 좋습니다. 사용자가 로그인했는지 확인하는 호출을합니다. 그런 경우 텍스트를 "로그 아웃"으로 변경할 수 있습니다. 이렇게하면 사용자가 변경 사항을 눈치 채지 못할 것입니다. 다른 옵션은 생성자에서 init 함수로 코드를 이동 한 다음 생성자가 사용자가 로그인했는지 확인하기 위해 호출 할 수 있습니다. 확인 후에 initWidget 및 기타 초기화 코드를 호출하는 initView를 호출 할 수 있습니다. –
크리스. 고맙습니다. 로컬 호스트에서 로그인 할 때 로그인 기능이 제대로 작동하지 않지만 배치 후에 예상대로 작동합니다. 로컬 호스트에서 실행할 때 로그인 후 GWT 모듈 "앱 이름"을 다시 컴파일해야합니다. 아마도 무해한 버그 일 수 있습니다. – Dexter