2011-01-27 9 views
2

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

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

StripesフィルタのActionResolver.Class init paramとしてカスタムActionResolverを使用しようとしたときに、動作していないようです。それはまだデフォルトのActionResolverを使用しているようです。これをどのように変更しますか?

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

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

+0

、私はそれがJavaのですが、あなたはJavaのようにそれをタグ付けしていないと信じています。これを簡単に解決できるURL書き換えソリューションがあるかもしれません。ほとんどのサイトで使用されているものですが、ご使用のプラットフォームに関する情報がもう少し必要です。 –

+0

はい、Stripesフレームワークを使用してJavaになっています。今はTomcatでテストしています。 –

答えて

0

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

+0

ええ。それは正しい選択です。 – Nishant

+1

Stripesを使用する場合、URL書き換えフィルタは不要です!私の答えを見てください。 – Kdeveloper

0

ストライプは、それは注釈を@URLBinding と呼ばれています。これが組み込まれていない、それはストライプ1.5に含まれていました。いくつかのドキュメントhereがあり、Stripes book IIRCにはさらに多くのものがありました。

@UrlBinding( "/ FOO/{バー}/{バズ}")マップ "/ foo" というのアクションと "バー" と "バズ" パラメータ が埋め込まれていてもよいことを示し URLにこの の場合、URL/foo/abc/123は 「abc」に設定され、bazは「123」に設定されたバーでアクションを呼び出します。

+0

私はこれを前に見ましたが、まだ試していません。これは、URL書き換えフィルターで役立ちます。 –

+0

URLの書き換えフィルタはもう必要ありません。 – Kdeveloper

+0

私はちょうどこれをテストして、それは動作します。これをアプリケーションがURLを処理するための主要な手段として使用しますが、@UrlBindingが直接処理できないその他のものに対してはURL書き換えフィルターを使用しています。 –

1

lucasに同意すると、URLマッピングはUrlBinding注釈で行う必要があります。 URL再マッピングフィルターを使いこなす必要はありません。ストライプスシステムを破るだけで正しいURLが生成されます。

これは、それはのようになります方法です:あなたが使用しているWebサーバと言語

@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”); 
    } 
} 
+0

[OK]を、私は私の他のコメントで述べたようなので、私はすでに、このいずれかを試してみました。しかし、今、StripesのURLバインドに問題があります。私は/ {username}/homeにバインドされたアクションBeanと/ {username}/account/logoutにバインドされたアクションBeanを持っています。変更をロードして/ myuser/homeにアクセスしようとすると、URLは複数のアクションBeanにバインドされています。なぜか分からない。 –

+0

デフォルトを上書きしない限り、マッピングされたActionResolver.Class各URLは一意でなければなりません。したがって、これらの2つよりも多くのActionBeansをプロジェクトに含めることができますか? – Kdeveloper

+0

さて私は、/ {ユーザー名} /家庭および/ {ユーザー名} /アカウント/ログアウトが互いに異なっていることを考えています。私はアプリケーションにもっと多くのアクションビーンを持っていますが、この2つだけがこのURLバインディングスキームを使って変更されています。私の検索に基づいて、StripesのURLバインディングは本当にこの種のURLに問題があるようです。パラメータがURLの終わりにあるときにはうまくいくが、最初のときにはうまくいかない。 http://www.stripesframework.org/display/stripes/Configuration+Reference:あなたはそれが正しい行動豆を選択することができるように、デフォルトの「ActionResolver.class」をカスタマイズする必要があり、その場合には –

関連する問題