EclipseでJSFのmavenベースのプロジェクトを作るには

提供: tknotebook
2016年11月9日 (水) 12:33時点におけるNakamuri (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

メインページ>コンピュータの部屋#Java>JSF Tips


JSFの解説本はほとんど IDE に NetBeans を使うことを勧めていますが、確かに、Eclipse では若干面倒なようです。 でもちょっとしたことを知っていれば使えます。

以下に maven ベースの JSF のプロジェクトの作成手順を紹介します。ややこしいことは大体 Eclipse がやってくれますので割と簡単です。

以下の手順は Pleiades All in One(4.6=Neon)と Glassfish 4.1.1 で確認してあります。 他の組み合わせはよくわかりません(^^;

事前準備

予め JSFをサポートしているサーバをインストールし、ランタイムを[サーバ]プロジェクトに登録しておいてください。 ここでは Glassfish4.X サーバの手順を紹介します。


  1. [ファイル]→[新規] のダイアログで、[その他]→[サーバー]→[サーバー] を開く
  2. Glassfish Tools を選択してインストールする。これは一度だけ行っておけばOK。
  3. 再び [その他]→[サーバー]→[サーバー] を開くとGlassfish 4 が選択できるようになっているので登録を行う。

mavenプロジェクトを作成する

  1. mavenプロジェクトを新規作成を開始する。
  2. ウィザードの最初のダイアログで[シンプルなプロジェクトの作成]にチェックを入れる。必要ならワーキングセットを割り当てる。
  3. 次のダイアログで、groupId, artifactId を入力、パッケージングは war を選択し、[完了]を押す。

これで mavenプロジェクトが出来上がりままずが、まだ Webプロジェクト汎用です。

JSFを使えるようにする

出来上がったプロジェクトの[プロパティ」を開き、[プロジェクト・ファセット]を選びます。

  1. [ランタイム]タブを選び、使うサーバのランタイムにチェックを入れます。
  2. [Java]でバージョンを指定します。最近なら1.8でよいでしょう。選んだサーバのランタイムによっては 1.8が選べない場合もあります。
  3. [JavaServer Faces]にチェックを入れ、バージョンを選んでください。最近なら 2.2でしょう。
  4. [動的Webモジュール]がチェックされていることを確認してください。最近ならバージョンは3.1でしょう。
  5. より詳しい構成が必要とダイアログの下の方に表示されますので、それをクリックしてダイアログを開き、[ユーザライブラリ]Glassfish System Librray(JSF2.2)を選らび、OKを押してください。
  6. OKボタンを押します。

以上で、JSF を使うための、faces-config.xml や web.xml は、Eclipseが自動で作成しますが Neon が自動生成した web.xml ではうまく動かないようです。

具体的には、JSFのタグは正常に展開されますが、 バッキングビーンが EL式で認識されず、例外が発生してしまいます

詳細は良く調べていないので、ひょっとすると Servlet仕様3.1 の場合のみかもしれませんが 以下の web.xml を使ってください。 これは実は NetBeans が自動生成する web.xml のコピーです(^^;

もし、他のサーバで同じような不具合があった場合は NetBeansが生成する web.xml をコピーした方がよいかもしれません。

Eclipseの web.xml との違いはサーブレット仕様のバージョンcontext-param タグの有無のようです。

GlassFish以外ではもう少し追記する必要があるそうですが未確認です。

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>