開発者ドキュメント

Google App Engine + JSF 2の例

このチュートリアルでは、Google App Engine(GAE)環境でJSF 2.0 Webアプリケーションを開発およびデプロイする方法について説明します。

使用されるツールと技術:

  1. JDK 1.6

  2. Eclipse用Eclipse 3.7 Google Plugin

  3. Google App Engine Java SDK 1.6.3.1

  4. JSF 2.1.7

1.新しいWebアプリケーションプロジェクト

Eclipseで、「

JSFGoogleAppEngine

」という名前の新しいWebアプリケーションプロジェクトを作成します。



「Google Plugin for Eclipse」では、GAEプロジェクトの構造のサンプルが生成されます。

2. JSF 2の依存関係

GAEでJSF 2を使用するには、次のjarファイルが必要です

  1. jsf-api-2.1.7.jar

  2. jsf-impl-2.1.7.jar

  3. el-ri-1.0.jar



war/WEB-INF/lib

“フォルダにコピーして入れてください。

「gae-jsf2-library-example2」、width = 478、height = 540]

プロジェクトフォルダを右クリックし、 ”

Properties

“を選択します。 ”

Java Build Path

” – > ”

Libraries

“タブを選択し、 ”

Add Jars

“ボタンをクリックし、上記のjarファイルを選択します。



  • Note ** +この `el-ri-1.0.jar`を置く必要があります。そうしないと、エラーメッセージが表示されます – link://google-app-engine/gae-jsf-unable-to-instantiate-expressionfactory-com -sun-el-expressionfactoryimpl/[ExpressionFactory ‘com.sun.el.E​​xpressionFactoryImpl’をインスタンス化できません。

3. JSFマネージドBean

3.1削除プラグインは `JSFGoogleAppEngineServlet.java`を生成しましたが、これは必要ありません。

3.2マネージドBeanを作成します。


File:src/com/mkyong/HelloBean.java

package com.mkyong;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import java.io.Serializable;

@ManagedBean
@SessionScoped
public class HelloBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

3.3新しいWebConfiguration.javaを作成します。

JSF 2はGAEをサポートしていない “javax.naming.InitialContext”を使用しています。

これを解決するには、JSFのソースコードのコピーを取得し、

WebConfiguration.java`をクローンし、


javax.naming.InitialContext`"クラスを使用しているメソッドをコメントし、 "

src/com/sun"/faces/comfig/WebConfiguration.java

"を参照してください。これで、新しく作成された `WebConfiguration.java`クラスは元の

WebConfiguration.java`をオーバーロードします。

  • 注** +完全なリンクを取得します://google-app-engine/gae-jsf-javax-naming-initialcontext-is-a-restricted-class/[WebConfiguration.javaのソースコード]

私はGAEチームがこのjarをホワイトリストに載せることは考えていませんが、JSFのチームがこれを将来のリリースで修正できることを願っています。

4. JSFページ

4.1 `hello.xhtml`ページを作成し、ユーザー入力を受け入れてhelloBeanに渡します。


File:war/hello.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">

<h:head>
    <title>GAE + JSF</title>
</h:head>
<h:body>
    <h1>Google App Engine + JSF 2.0 example - hello.xhtml</h1>
    <h:form>
        <h:inputText value="#{helloBean.name}"></h:inputText>
        <h:commandButton value="Welcome Me" action="welcome"></h:commandButton>
    </h:form>
</h:body>
</html>

4.2 `welcome.xhtml`ページを作成し、hellobeanからのユーザ入力を表示します。


File:war/welcome.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html">

<h:head>
    <title>GAE + JSF</title>
</h:head>
<h:body bgcolor="white">
    <h1>Google App Engine + JSF 2.0 example - welcome.xhtml</h1>
    <h2>Welcome #{helloBean.name}</h2>
</h:body>
</html>

4.3プラグインが生成した `index.html`ファイルを削除すると、これは必要ありません。

5. web.xml

web.xmlを更新し、JSF 2を統合します。


File:web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:web="http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app__2__5.xsd"
    version="2.5">

    <display-name>JavaServerFaces</display-name>

    <!-- GAE 1.6.3 cannot handle server side (JSF default) state management. -->
    <context-param>
        <param-name>javax.faces.STATE__SAVING__METHOD</param-name>
        <param-value>client</param-value>
    </context-param>


    <!-- Change to "Production" when you are ready to deploy -->
    <context-param>
        <param-name>javax.faces.PROJECT__STAGE</param-name>
        <param-value>Development</param-value>
    </context-param>

    <!-- Welcome page -->
    <welcome-file-list>
        <welcome-file>faces/hello.xhtml</welcome-file>
    </welcome-file-list>

    <!-- JSF mapping -->
    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <!-- Map these files with JSF -->
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>/faces/** </url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>** .jsf</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>** .faces</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>** .xhtml</url-pattern>
    </servlet-mapping>

</web-app>
  • 注** GAEはサーバ側の状態管理をサポートしていないため、この “link://google-app-engine/gae”を避けるためには “javax.faces.STATE

    SAVING

    METHOD”〜 “` `クライアント ‘”を定義する必要があります。 -jsf-view-hello-xhtml-could-be-restored/[View/hello.xhtmlを復元できませんでした]」というエラーメッセージが表示されます。

6. GAEでセッションを有効にする

`appengine-web.xml`を更新し、セッションのサポートを有効にします.JSFはこれを必要とします。 +

+ファイル:appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application></application>
  <version>1</version>

    <sessions-enabled>true</sessions-enabled>

</appengine-web-app>

7.ディレクトリ構造

最終的なディレクトリ構造を確認します。



8.ローカルで実行する

プロジェクトを右クリックし、「Webアプリケーション」として実行します。


URL:http://localhost:8888/hello.jsf



ボタンをクリックします。



10. GAEに展開する

`appengine-web.xml`ファイルを更新し、あなたのApp EngineアプリケーションIDを追加してください。

ファイル:appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
  <application>mkyong-jsf2gae</application>
  <version>1</version>

    <sessions-enabled>true</sessions-enabled>

</appengine-web-app>

プロジェクトを選択し、Googleのアイコン「

App Engineへのデプロイ

」をクリックします。




URL:http://mkyong-jsf2gae.appspot.com/hello.jsf



ソースコードをダウンロードする

ファイルサイズが大きいため、すべてのJSFおよびGAE jarは除外されます。

ダウンロード:

JSF2-GoogleAppEngine-Example.zip

(42 KB)

モバイルバージョンを終了