public class MyClass{
private String shared;
public String mySharedFun() {
`Session session = Sessions.getCurrent();`
}
上記の場合、Http "session" null を取得しています。インターフェイスを実装する必要がありますか。
リクエストをメソッドに渡します。次に、HttpSessionセッション=(HttpSession)request.getSession(); あなたにセッションを提供します。セッションがない場合は、セッションが作成されます。新しいセッションを作成する必要がない場合は、if(session.isNew())が現在のセッションがあるかどうかを通知します。
これは、ZK イベント ハンドラーで実行されている場合に機能します。
SimpleSession s = (SimpleSession) Executions.getCurrent().getDesktop().getSession();
HttpSession session = (HttpSession) s.getNativeSession();
実際の http セッションに到達するのは難しいように思えますが、ZK を使用した経験がある場合は通常行うことではありません。データを配置するより自然な場所は、java.util.Map である DesktopScope や sessionScope などの ZK 暗黙的スコープ オブジェクトです。
理由は次のとおりです。ユーザーは、一度に 2 つの注文を処理できるようにするために、2 つのブラウザ タブでサイトへの 2 つの URL を開く場合があります。開いている URL ごとに zk デスクトップが作成されます。ユーザーがクリックする各タブで、イベント ハンドラー (ユーザーのマウス クリック) は、イベント ハンドラーが実行されているデスクトップ内のビジネス データと連携する必要があります。ビジネス データを http セッションに配置すると、そのデータはそのユーザーに対してグローバルになります。一度に 2 つのブラウザ タブを開いて 2 つのジョブを同時に実行しようとするユーザーは、一方のブラウザ タブが他方のタブで行っている作業を台無しにしてしまいます。何かがユーザーにとってグローバルであることを本当に意味する場合は、それを sessionScope に入れます。物事は実際には http セッション内のマップに保持されます。
ドキュメントの基本的な概念のページでは、http://books.zkoss.org/wiki/ZK%20Developer%27s%20Guide/Fundamental%20ZK/Basic%20Concepts/Page%20and%20Desktopでそのようなアイデアを紹介しています。 requestScope、componentScope、pageScope、spaceScope (「ID 空間」) などの他の暗黙的なオブジェクト。
通常、ZK イベント処理として使用しない requestScope などのスコープは、ajax リクエストから離れて抽象化します。イベントでdesktopScopeを操作します。HTTP リクエスト/セッションの世界から来ると、これはすべて非常に不自然に思えますが、ZK は、デスクトップにあるコンポーネントで発生するイベントを使用してイベント駆動型プログラミングを行うことです。そのため、ZK を使用する場合は「自然」な componentScope、desktopScope、sessionScope を使用します。
Session クラスは ZK から取られていると思います。セッションを取得する正しい方法は
Executions.getCurrent().getSession();