カスタム正規表現を使用してこのタイプを実行できますが、url-rewriteルールを使用して、末尾にスラッシュがない場合は追加することをお勧めします。1つのURL(末尾に「/」がある場合とない場合)を選択する必要があります。そうしないと、実際には2つの異なるアドレスで同じリソースを提供し、検索エンジンや他のクローラーによって罰せられます。
これを行うには、次のような書き換えルールを使用します。
<rewrite match="/questions/approved/[^/]+" trailingSlash="append" />
これにより、サーバーはURLの末尾に「/」がないことを検出し、末尾に「/」を付けてリクエストを適切な場所にリダイレクトします。
列挙型の問題に対処するために、これはもう少し複雑です。通常、値を列挙に直接バインドすることはお勧めしません。この場合、実際には列挙型にバインドしていませんが(推測しています)、リテラル文字列のURL値をリクエストスコープのELコンテキストに実際にバインドしています。この値は、アプリケーションの別の場所で抽出され、そこでENUMへの変換が行われます。
PrettyFaces 4がリリースされるまでは、代わりに値をStringの場所にバインドし、アクションメソッドを使用して、次のように正しい値を自分でロードすることをお勧めします。
<url-mapping id="approvedQuestions">
<pattern>/questions/approved/#{params.viewOption}/</pattern>
<view-id>/approved.xhtml</view-id>
<action>#{params.loadViewOption}</action>
</url-mapping>
同じくOCPsoftのより高度なURL書き換えツールを試したい場合は、JavaベースのURL書き換えツールである「Rewrite」(http://ocpsoft.com/rewrite/)を使用できますが、そうではありません。 JSFと同じくらい統合されています。
PrettyFaces 4はコアとしての書き換えに基づいており、その時点で、現在使用しているすべての機能が、このようなことを実行できるようになります。これは、私が間違っていない場合に必要なことです。
.addRule(Join.path("/questions/approved/{viewOption}").to("/approved.xhtml")
.where("viewOption")
.matches("[^/]+/?")
.transformedBy(TrailingSlash.append())
.transformedBy(To.upperCase())
ライブラリでまだ定義されていないため、独自のトランスフォーマーを作成する必要がありますが、それが一般的な考え方です。これは、PrettyFacesで現在可能なものよりもはるかに強力ですが、同じJSFナビゲーション統合を提供せず、構成が少し難しいです。
これがお役に立てば幸いです、〜リンカーン