2013-04-30 18 views
8

Korzystając z Google Web Toolkit, chciałbym zakodować odpowiednik hard refresh (control + F5).Twardy odświeżanie w GWT

Nie wierzę (lub nie wiem), czy GWT ma Window.Location będzie działać.

import com.google.gwt.user.client.Window.Location; 

Window.Location = currentPage; // I don't think it'll be hard refresh 
+0

Czy mogę Cię zapytać, dlaczego musisz odświeżyć? Czy masz zewnętrzne zasoby, czy wszystko jest obsługiwane przez GWT? Ponieważ w ostatnim przypadku nie rozumiem, dlaczego chcesz wymusić ponowne załadowanie. –

+0

@AndreaBoscolo, gdzie rozważam dodanie tego twardego odświeżenia, mój kod przekierowuje użytkowników na ogólną stronę błędu. Jednak zamiast przekierować je do ogólnej strony błędu, chcę przekierować je ponownie, aby zalogować się ponownie (co zostanie osiągnięte przez twarde odświeżenie). Dane użytkownika wygasają po 15 minutach. Nie wiem, jak rozwiązać podstawowy problem, więc dodanie twardego odświeżania jest lepsze niż zmuszenie użytkownika do otwarcia nowej przeglądarki i ponownego logowania. –

Odpowiedz

9

do przeładunku bieżącej strony trzeba zadzwonić Window.Location.reload() metody.

Ponownie ładuje bieżące okno przeglądarki. Cały stan GWT zostanie utracony.

lub można nawet określić własny JSNI (poniżej jak todo), ponieważ domyślnie force reload is false:

public static native void forceReload() /*-{ 
     $wnd.location.reload(true); 
    }-*/; 
+0

Więc 'GWT''s Window.Location.reload() nie wymusi przeładowania? Ale kod JSNI będzie, jeśli użyty zostanie parametr "true"? –

+0

Jeśli przyjrzeć się implementacji metody Window.Location.reload(), to nie używa "true" jako parametru. domyślnie jest to fałsz. Tak działa Natywny skrypt JavaScript. Możesz dodać tę statyczną metodę do swojej klasy Utility, jeśli ją posiadasz. –

+0

Z szacunkiem, czy odpowiedź nie powinna zawierać tylko kodu JSNI? Jeśli 'Window.Location.reload()' nie wykonuje twardego odświeżania, czy mógłbyś edytować odpowiedź? –

4

Według https://developer.mozilla.org/en-US/docs/DOM/window.location#Methods trzeba by zadzwonić window.location.reload(true) wymusić reload bieżącej strony.

Niestety GWT opakowuje tylko window.location.reload() przez Window.Location.reload() i od przeglądarki zależy pobranie strony z pamięci podręcznej lub z innego pobrania. Odbywa się to w celu uzyskania największego rozwiązania w różnych przeglądarkach.

Nigdy nie próbowano, ale powinieneś być w stanie użyć następujących.

public static native void reload(boolean force) /*-{ 
    $wnd.location.reload(force); 
}-*/; 
1

Na stronie reload gwt, masz dwie opcje:

1) window.location.reload();

Ponownie ładuje bieżące okno przeglądarki. Cały stan GWT zostanie utracony.

2) Window.Location.replace ("newurl");

Zamienia bieżący URL na nowy. Cały stan GWT zostanie utracony. W historii przeglądarki bieżący adres URL zostanie zastąpiony nowym adresem URL.