Quantcast
Channel: Challenge Engineer Life !
Viewing all articles
Browse latest Browse all 134

JSFのURLをきれいにするPrettyFaces

$
0
0

GW中、久しぶりにCore JavaServer Facesの本を改めて読み返していたのですが、RESTful Navigation and Bookmarkable URLsの章で「pretty URLs」という表現があることに気づきました。

かわいいurlって何?と思ったのですが、Alcで調べると、prettyには「きれいにする」という意味があるようです。eow.alc.co.jp

本の文脈的にもこれっぽい。。。で、本の中には

Currently, JSF does not have a standard mechanism for producing or consuming "pretty URLs", but since JSF 2.0, there is support for GET requests.

と記述があって、Bookmarkableな仕組みの話につないでいました。

で、そういえばPrettyFacesというライブラリがあったなぁと。

PrettyFaces

前にPrettyFacesを知ったときは、PrimeFacesやIceFacesのようなリッチコンポ―ネントの1つなのかなー?ぐらいの感じでスルーしてました(^^;; が、上記の意味を知って、改めてみてみたらJSFにおけるURLを色々と使いやすくするものでした。

f:id:kikutaro777:20150507223224j:plain

サイトTopページに

PrettyFaces is an OpenSource URL-rewriting library with enhanced support for JavaServer Faces – JSF 1.1, 1.2 and 2.0 – enabling creation of bookmark-able, pretty URLs. PrettyFaces solves the “RESTful URL” problem elegantly, including features such as: page-load actions, seamless integration with faces navigation, dynamic view-id assignment, managed parameter parsing, and configuration-free compatibility with other web frameworks.

とあります。JSFで"RESTful URL"…!?

気になったので、ちょっと触ってみました。

mavenのpom.xmlで以下追加しました。

<dependency><groupId>org.ocpsoft.rewrite</groupId><artifactId>rewrite-servlet</artifactId><version>3.0.0.Alpha6</version></dependency><dependency><groupId>org.ocpsoft.rewrite</groupId><artifactId>rewrite-config-prettyfaces</artifactId><version>3.0.0.Alpha6</version></dependency>

WEB-INF配下に「pretty-config.xml」というxmlを追加します。

f:id:kikutaro777:20150507223528j:plain

今回はxmlを利用しましたが、アノテーションベースでも書けるようです(試してないです)

URLのマッピング

JSFでベタにWebアプリを作成すると、以下のようなURLになります(facesはservlet-mappingで変更可能+ここの例ではxhtmlを利用を前提としてます)

http://localhost:8080/PrettyFaces/faces/login.xhtml

PrettyFacesでは、これを

http://localhost:8080/PrettyFaces/login

と以下定義によってマッピングできます。

pretty-config.xmlの定義

<url-mapping id="login"><pattern value="/login" /><view-id value="/faces/login.xhtml" /></url-mapping>

Path Parameters

PrettyFacesのDocumentationでは「3.2. Add Path-parameters to your mapped URL (REST)」のタイトルにあるようにRESTとして紹介しています。

http://localhost:8080/PrettyFaces/faces/product/order.xhtml

http://localhost:8080/PrettyFaces/product/ここにパラメータ

のようにマッピング。JSFのViewParamで取れるとのことで

<h:body><h:form><f:metadata><f:viewParam name="id"value="#{orderBean.id}" /></f:metadata><h:outputText value="#{orderBean.id}" /></h:form></h:body>

のように記述。

f:id:kikutaro777:20150507230638j:plain

サンプルそのまま書いてしまった(^^;けど動きました。ためしに「book」というパラメータにすると

f:id:kikutaro777:20150507230734j:plain

pretty-config.xmlは以下です。

<url-mapping id="order"><pattern value="/product/#{id}" /><view-id value="/faces/product/order.xhtml" /></url-mapping>

なお、直接EL式でバインドも可能なようで、次のような設定でも動きました。

<url-mapping id="user"><pattern value="/#{userBean.user}" /><view-id value="/faces/user/user.xhtml" /></url-mapping>

他にも色々と機能あるようなので、もう少しみてみようかなぁ。

JSFではServletやJAX-RSを比べて、URLを意識した設計をすることはあまりないと思いますが、その辺を結び付けたいときには使えるのかも。相性が良いかは置いておいて。

また、今回はお試しレベルにすぎず、実戦投入してるわけではないので、ご注意を(^^;


Viewing all articles
Browse latest Browse all 134

Latest Images

Trending Articles