典型的な JSF アプリケーションの多くのページは動的です。つまり、特定のタイプのすべてのオブジェクトをレンダリングするために使用されるテンプレートビューがあります。これらのページでは、PrettyFaces 書き換えソリューションがうまく機能し、簡単に作業できます。例として、ID またはその他の一意のフィールドに基づいて製品を表示する Web アプリケーションがあります。通常、このような表示に関連する 1 つのビュー( などproduct.xhtml
) と、製品の一意のフィールドを保持する 1 つのビュー パラメータ ( など) がありますname
。
/product.xhtml?name=exact-product-name
簡単な設定で、たとえば次のように書き換えられたすべてのリクエストを取得します/products/exact-product-name
。
URL マッピング:
<url-mapping id="viewProduct">
<pattern value="/products/#{ name : productBean.name }" />
<view-id value="/store/product.xhtml" />
<action> #{ productBean.loadData } </action>
</url-mapping>
景色:
<f:metadata>
<f:viewParam id="name" name="name" required="true" />
</f:metadata>
モデル:
public class ProductBean implements Serializable {
private ProductService productService;
private String name;
private Product product;
public String loadData() {
if(!((name == null) || (name.equals(""))) {
Product product = productService.findByName(name);
this.product = product;
return null;
}
return "error";
}
}
ただし、ビュー パラメータを使用して上記の方法でテンプレート化されていない、静的データを含むページも多数あります。これらのページは、そこに置かれたものを表示するだけです。たとえば、個別のビュー (など) として作成された多くの記事が存在する場合があります。PrettyFaces を使用すると、そのようなページの数と同じ数の URL マッピングを作成する必要があります。しかし、実際には、この動作は1 つの URL マッピングでテンプレート化することもできます。残念ながら、これは現在の PrettyFaces リリースではサポートされていません。/pages/articles/article1.xhtml
PrettyFaces フレームワークの提案された拡張機能は次のとおりです。
<url-mapping id="viewArticle">
<pattern value="/articles/#{ articleName }" />
<view-id value="/store/#{ articleName }.xhtml" />
</url-mapping>
または、ArticleBean
(たとえば、 と の 2 つのフィールドを含み、articleName
namearticleId
は id フィールドの setter で一意の値として定義されます)を使用します。
<url-mapping id="viewArticle">
<pattern value="/articles/#{ articleId : articleBean.articleId }" />
<view-id value="/store/#{ articleBean.articleName }.xhtml" />
</url-mapping>
または、EL 式に基づく他の事前定義された依存関係を使用します。これは、一意の対応に基づいています。
DynaView
ビュー ID に不確実性がないため、これは a にはならないことを強調したいと思います。a<pattern>
と a の間には 1 対 1 の対応があり<view-id>
ます。
この機能を PrettyFaces に実装することについてどう思いますか?