2

Twitter のようなアプリケーションのような URL パターン/スキームを持つアプリケーションの方法を構築しようとしています。たとえば myapplication.com/username の場合、ユーザー名はパラメーターとして扱われる実際のユーザー名です。このパラメーターは、ユーザー関連ページを表示するために使用されます。私のアプリケーションには、myapplication.com/username/accountsettings や myapplication.com/username/profile など、他のリソースのプレフィックスがユーザー名であるこの URL スキームもあります。ユーザー名は、ある種のサブコンテキスト パスとして機能します。

タイトルが示すように、Stripes を使用しています。私が今行っているのは、URL バインディング (この場合はユーザー名) から最初の空でない文字列を取り出すカスタム ActionResolver を作成することです。これは、ActionBeans が URL の先頭に追加されたユーザー名を考慮しないためです。たとえば、myapplication.com/username/accountsettings を処理するアクション Bean は、/accountsettings にのみバインドされます。

カスタム ActionResolver を Stripes フィルタの ActionResolver.Class 初期パラメータとして使用しようとしたところ、機能していないようです。デフォルトの ActionResolver をまだ使用しているようです。これを変更するにはどうすればよいですか?

また、これを行うためのより簡単で直感的な方法はありますか? 私は Stripes と URL バインディングにあまり詳しくないので、フレームワーク コンポーネントを拡張/変更せずにこれを行うことができる Stripes の機能はありますか?

ありがとう。

4

3 に答える 3

1

lucas に同意します。URL マッピングはUrlBindingアノテーションで行う必要があります。URL リマッピング フィルタをいじり始める必要はありません。これは、Stripes システムを壊して正しい URL を生成するだけです。

これは次のようになります。

@UrlBinding("{username}/profile/")
public class MyProfileAction implements ActionBean {
    private ActionBeanContext context;
    private String username;

    public ActionBeanContext getContext() {
        return context;
    }

    public void setContext(ActionBeanContext context) {
        this.context = context;
    }

    public void setUsername(String username) {
        this.name = name;
    }

    public String getUsername() {
        return username;
    }

    @DefaultHandler
    public Resolution view() {
        return new ForwardResolution(“/WEB-INF/MyProfile.jsp”);
    }
}
于 2011-01-31T15:54:42.667 に答える
0

URL Rewrite Filterを偶然見つけましたが、これまでのところ、私のアプリケーションのニーズに合っているようです。

于 2011-01-30T16:17:00.557 に答える
0

Stripes にはこれが組み込まれています。これは@URLBindingアノテーションと呼ばれ、Stripes 1.5 に含まれていました。ここにはいくつかのドキュメントがあり、 Stripes book IIRCにはさらに多くのドキュメントがありました。

@UrlBinding("/foo/{bar}/{baz}")はアクションを "/foo" にマップし、"bar" および "baz" パラメーターを URL に埋め込むことができることを示します。この場合、URL /foo/abc/123 は、bar を「abc」に設定し、baz を「123」に設定してアクションを呼び出します。

于 2011-01-30T17:17:34.273 に答える