Defect #722
完了ログイン後にもといたページに戻りたい
0%
説明
マイページとか開いてるときにログインすると、トップページに戻ってしまう。
できればログイン後はもといたページに戻りたい。
Skillmaps.java#31
injector.getAccountService().login(GWT.getHostPageBaseURL() + Window.Location.getQueryString(),
にパラメータをつければいけるんだけど、":mypage:"とかって文字列はどうやって取得すれば良いのだろう?
ファイル
yusuke kokubo さんがほぼ13年前に更新
- ステータス を 新規(New) から 担当(Assigned) に変更
- 担当者 を yusuke kokubo にセット
試してみたらWindow.Location.getHash()でとれることはとれました。
ただ、これだとページ読み込み時にログイン後の遷移URLが固定されてしまうので、
ごちょごちょ動きまわってからログインすると意味ないです。
これちゃんとやろうと思ったら、ページ遷移するたびにログインURLを書き換えるような小細工が必要ですね…。
Window.Location.getHash()でとれることはとれるのでそんなに難しくはないのかもしれませんが
yusuke kokubo さんがほぼ13年前に更新
History#addValueChangeHandler試してみました。
これでできそうな感じがしたのでしたがダメでした。
なぜか選択したPlaceの一個前のやつがとれてきてるみたいです。
書く場所がおかしい…?
public void onModuleLoad() { Resources.INSTANCE.style().ensureInjected(); final Injector injector = GWT.create(Injector.class); injector.getActivityManager(); RootPanel.get("loader").setVisible(false); RootPanel.get("header").add(new Header(null)); ContentsPanel contentsPanel = injector.getContentsPanel(); contentsPanel.init(); RootPanel.get("contents").add(contentsPanel); RootPanel.get("footer").add(new Footer()); injector.getAccountService().login(GWT.getHostPageBaseURL() + Window.Location.getQueryString() + Window.Location.getHash(), new AsyncCallback<Login>() { @Override public void onSuccess(Login result) { final Login login = injector.getLogin(); login.setAdmin(result.isAdmin()); login.setEmailAddress(result.getEmailAddress()); login.setKey(result.getKey()); login.setLoggedIn(result.isLoggedIn()); login.setLoginUrl(result.getLoginUrl()); login.setLogoutUrl(result.getLogoutUrl()); login.setNickname(result.getNickname()); login.setProfile(result.getProfile()); login.setReceiveEmail(result.getReceiveEmail()); login.setVersion(result.getVersion()); //TODO headerもdisplay化? RootPanel.get("header").clear(); RootPanel.get("header").add(new Header(login)); injector.getHistoryHandler().handleCurrentHistory(); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { System.out.println(event.getValue()); System.out.println(Window.Location.getHash()); login.setLoginUrl(GWT.getHostPageBaseURL() + Window.Location.getQueryString() + Window.Location.getHash()); } }); } @Override public void onFailure(Throwable caught) { Window.alert("初期処理に失敗しました。再表示してください。"); } }); }
yusuke kokubo さんがほぼ13年前に更新
了解です。
MVPをよくわかってなくて申し訳ないのですが、
injectorからeventBusを取得するのってどこに書けば良いですか?
yusuke kokubo さんがほぼ13年前に更新
あっゴメンなさい。
injector.getHistoryHandler().handleCurrentHistory()
する前に
History.addValueChangeHandler
すればできそうです!
yusuke kokubo さんがほぼ13年前に更新
とりあえずできました。
ちょっと不恰好ですが…。
RootPanel.get("header").clear();
RootPanel.get("header").add(new Header(login));
History.addValueChangeHandler(new ValueChangeHandler<String>() {
@Override
public void onValueChange(ValueChangeEvent<String> event) {
login.setLoginUrl(login.getLoginUrl().replaceFirst(
"%23%21.+",
"%23" + event.getValue().replaceAll("!", "%21").replaceAll(":", "%3A")));
RootPanel.get("header").clear();
RootPanel.get("header").add(new Header(login));
}
});
injector.getHistoryHandler().handleCurrentHistory();
yusuke kokubo さんがほぼ13年前に更新
デプロイしてみましたが、本番環境とURLが違ってたのでうまくいきませんでした^^;
http://feature-722.skillmaps.appspot.com/
もっとスマートな方法でやるしかないかなあ。
yusuke kokubo さんがほぼ13年前に更新
- ファイル 0001-refs-722.patch 0001-refs-722.patch を追加
どうあがいても無理っぽい。
ローカルだと動くんだけどなあ…。
yusuke kokubo さんがほぼ13年前に更新
ページ遷移ごとにRPC使うのはあきらかに愚策なので妥協案としては
- ログインURLは/loginに固定
- センター側のLoginControllerでcreateLoginUrlしてリダイレクト
- ログインさせる
みたいな感じかなあ。
yusuke kokubo さんがほぼ13年前に更新
もう一歩進化させて…
- ユーザーがログインリンクをクリックしたタイミングでRPCでURLを取得
- 取得したURLにアクセス
という流れかな。
yusuke kokubo さんがほぼ13年前に更新
- ファイル 0001-refs-722.patch 0001-refs-722.patch を追加
とりあえずこれでやりたいことはできました。
おーはしさんの考えた方法とはちょっと違うと思いますが見てもらってよいですか。
yusuke kokubo さんがほぼ13年前に更新
- ステータス を 担当(Assigned) から 終了(Closed) に変更
ひとまずstable-004にしました。
問題ありそうなら教えてください。