---
title: スタンドアローンJSF2.2+PrimeFaces入門メモ
tags: ["JSF", "Java", "PrimeFaces"]
categories: ["Programming", "Java", "JavaServerFaces", "PrimeFaces"]
date: 2014-05-22T22:12:20Z
updated: 2014-05-22T22:12:20Z
---
フルスタックJava EEじゃなくてJSFだけ使いたいぜってときのメモ。
というかPrimeFacesを単品で使いたいんです。フロントエンド構築用にJavaScript MV*フレームワークの代替にしたいんです。
### mavenで雛形プロジェクトを作る
$ mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=hello-jsf -Dversion=1.0.0 -DarchetypeArtifactId=maven-archetype-webapp
### JSF(mojarra)のdependencyを追加
pom.xmlに以下のように修正します。折角なのでコピペできるように全文貼っておきます。
4.0.0
com.mycompany.app
hello-jsf
war
1.0.0
hello-jsf Maven Webapp
http://maven.apache.org
com.sun.faces
jsf-api
2.2.6
com.sun.faces
jsf-impl
2.2.6
junit
junit
4.11
test
hello-jsf
### web.xmlを修正する
`mvn archetype:generate`で吐かれるweb.xmlはゴミなので、以下に置換します。
JSF Web Application
index.xhtml
Faces Servlet
javax.faces.webapp.FacesServlet
1
Faces Servlet
*.xhtml
### Facelets作成
src/main/webapp/index.xhtmlを作成します。
IntelliJ IDEAを使う場合はwebappsで右クリックして「JSF/Facelets」をクリック。「Kind」を"Facelets file"にする。

中身はこんな感じ(IDEAが出力したもの)
Simple JSF Facelets page
Place your content here
`mvn archetype:generate`で吐かれたindex.jspは捨ててください。
### デプロイ
JSFしか扱っていないのでAPサーバーはなんでもいいっす。ドラ猫でおk。
くそ丁寧にIDEAでのTomcat設定方法を貼っておきます。


起動しましょう。

さくっと動きました!

### エコーアプリ作成
#### Managed Bean作成
CDIとか使いません。だまって`javax.faces`パッケージのアノテーションを使います。
僕にとってJSFはクライアントサイドフレームワークであり、JavaScriptの代替なので複雑にしたくないからです。
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.io.Serializable;
@ManagedBean
@RequestScoped
public class HelloBean implements Serializable {
private String name;
private String output;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void greet() {
output = "Hello " + name;
}
public String getOutput() {
return output;
}
}
#### Facelets修正
Simple JSF Facelets page
redeployします。↓な感じのアプリができます。

#### 素のHTMLっぽくする
JSF2.2からjsf属性が使えるようになったので、専用タグ使わなくてもHTMLで記述できるようになりました。こっちだとWebブラウザで直接XHML開けていいですね。こっちの場合も`#{}`内の補完が効きます。
Simple JSF Facelets page
ちなみにXHTMLの変更は

で反映してます。
### Prime Facesを導入。
ここまで前置き。僕が本当に使いたいのは[PrimeFaces](http://www.primefaces.org/)です。
この豊富なコンポーネント群を使って、このブログの管理画面をBackbone.jsゴリゴリからJavaで書き換えたいのです。
#### pom.xml修正
pom.xmlに
org.primefaces
primefaces
5.0
を追加します。
全文はっておきます。
4.0.0
com.mycompany.app
hello-jsf
war
1.0.0
hello-jsf Maven Webapp
http://maven.apache.org
com.sun.faces
jsf-api
2.2.6
com.sun.faces
jsf-impl
2.2.6
org.primefaces
primefaces
5.0
junit
junit
4.11
test
hello-jsf
ライブラリを追加したらredeployが必要。
#### Facelets修正
さっきのXHTMLを公式ページの[Getting Started](http://www.primefaces.org/gettingStarted)のサンプルで上書きしちゃいます。

できた!
----
今日はここまで。
次はJavaScript MV*フレームワークのようにJSFからREST APIにアクセスします。
JAX-RS Client APIを使いたいところですが、依存関係がすっきりしなくなるし使いにくいので、[Retrofit](/#/entries/260)使います。
そして[組み込みjar](/#/entries/261)にして、RESTサーバーとして独立したサービスを作りたいと思います。
併せて読みたい