6

だから私はApache WicketApache Clickを比較する Wicket タグの下で別の質問を読んでいました。私の意見では、簡潔な説明。私はクリックの世界よりもウィケットの世界に精通しています。

私が読んだコメントの 1 つは、ステートレスな Wicket ページを作成できるというものでした。私はこれについて考え始めましたが、ステートレスなものに対してリクエストまたはページ リクエストを行う方法がわかりませんでした。これは、状況によっては確かに便利です。では、状態なしで Wicket を使い始めるにはどうすればよいでしょうか?

4

5 に答える 5

16

Wicket はデフォルトではステートレスで、必要に応じてステートフル モードに切り替わります。ステートレス モードを解除するのは非常に簡単です。

意図したステートレス ページとステートレス コンポーネントに で注釈を付けると便利で@StatelessComponentあることがわかりました。これはwicket-devutils プロジェクトにあります。StatelessChecker次に、次のようにWebApplication.init()メソッドに a を追加します。

protected void init(){
    ...
    this.addPostComponentOnBeforeRenderListener(new StatelessChecker());
    ...
}

このようにして、問題のあるステートフル コンポーネントに関する例外が常に発生します。

于 2010-10-17T18:03:03.640 に答える
8

ページがブックマーク可能で、ステートレスでないコンポーネント/動作が含まれていない場合、ページは自動的にステートレスになり、セッションに保存されません。ユーザーがステートレスなページしか訪れない限り、セッションは成立しないと思います。ほとんどの場合、ページの表示方法に関するすべてが、引数なしのコンストラクターまたは PageParameters 引数を取るコンストラクターからのみ決定できる場合。通常の Link クラスと Form クラスはステートレスではないため、代わりに StatelessForm と StatelessLink を使用する必要があります。

于 2010-02-01T16:42:50.417 に答える
4

私はそれをテストで確認することを好みます。

ステートレス ページ オーバーライドの各テスト

getStatelessWebPage()

デフォルトでは null を返します。

次に、基本的なテストで、ページ上のすべてのコンポーネントにアクセスし、コンポーネントがステートレスかどうかを確認する一般的なテストを行います

@Test
public void checkForStateless()
{
    StatelessWebPage statelessPage = getStatelessWebPage();
    if (statelessPage != null)
    {
        Page page = (Page)statelessPage;
        if (!page.isPageStateless())
        {
            //find the reason
            Component statefulComponent = page.visitChildren(Component.class, new StatelessChecker());
            if (statefulComponent != null)
            {
                fail("Stateless page contains stateful component ["
                     +statefulComponent.getClass().getName()+" : "
                     + statefulComponent.getMarkupId() +"]");
            }
        }
    }
}

class StatelessChecker implements IVisitor<Component, Component>
{
    @Override
    public void component(Component component, IVisit<Component> iVisit)
    {
        if (!component.isStateless())
        {
            iVisit.stop(component);
        }
    }
}
于 2012-01-07T12:21:06.757 に答える
3

意図的にステートレスにしたいページがある場合、このsetStatelessHint(boolean state)メソッドは便利です。

ページがステートレスでない場合、警告が表示されます。

詳細については、ここを参照してください: Wicket ステートレス ページ

于 2011-03-17T20:39:47.977 に答える
0

ユーザーが認証されているかどうかに応じて、ページがステートレスまたはステートフルになる状況はどうですか?

例としては、現在ログオンしているユーザー名、プロフィール リンクなどを表示するほとんどの Web ページの上部にある典型的な「アカウント」パネルがあります。

サイトのほとんどのページではこれが一番上にあるため、ユーザーがログオンしているかどうかに応じて、両方のページがステートフルとステートレスの両方である必要があります。

于 2012-01-11T07:21:23.163 に答える