3

現在、RIA の作成に Vaadin 7 を使用しており、ログイン機能を設計しています。

アプリケーションの設計は単純です。

UI クラスは、異なるView クラス間のナビゲーションを実行します。特に、最初に表示されるビューは LoginView クラスであり、ユーザーが認証された後、UI クラスはユーザーを MainView にリダイレクトします。

認証後、ユーザー データ (名前や姓など) をセッションに設定し、(特定のビューに関係なく) Web アプリケーションの右上隅に常に表示したいと考えています。

初心者として Vaadin Book を読み、最初に第 11 章https://vaadin.com/book/-/page/advanced.global.htmlに示されているスキームを使用しましたが、おそらく期待どおりに機能していないようですビュー ナビゲーション スキームを使用しているためです。

そこで、次のアプローチを使用します。

認証が正しく完了すると、LoginView は次のコードを使用してユーザー データを VaadinSession 属性として保存しようとします。

VaadinSession.getCurrent().setAttribute("name", name);

次に、UI は MainView に移動し、次の方法でユーザーの名前を取得しようとします。

VaadinSession.getCurrent().getAttribute("name");

しかし、それは null 値を取得します。

誰かが理由を知っていますか?助けていただければ幸いです。

ありがとうございました。

4

3 に答える 3

1

代わりに、HTTP セッションに値を保存することをお勧めします。

VaadinServletService.getCurrentServletRequest().getSession().setAttribute("name", name);

VaadinServletService.getCurrentServletRequest().getSession().getAttribute("name");
于 2016-11-28T08:58:01.997 に答える
0

UI を拡張するメイン クラスで @PreserveOnRefresh アノテーションを使用します。次に、変数データをメイン クラスに格納できます。((MyUIClass)UI.getCurrent()).getSomeVariable メソッド式を使用して、どこからでも (任意のビューで) 与えることができます。

于 2013-05-14T09:00:31.273 に答える
0

null値を取得する理由について推測しています。最新の Vaadin のほとんどのチュートリアルでは、ナビゲーション ページは最初に UI でオブジェクトとして作成されます。このプロセスでインスタンス化されたこれらのビューの 1 つが MainView である場合。名前を表示するラベルがクラスのコンストラクターに文字列を設定する場合、次の行:

label.setValue(VaadinSession.getCurrent().setAttribute("name", name));属性がログイン関数によってまだ設定されていない場合は null になります。

@overrideenter()関数でユーザー文字列を示すラベルを更新するか、別の方法で処理する必要があります。

于 2016-11-27T20:41:28.570 に答える