1. 概要

今日では、ソーシャルネットワーキングから銀行、ヘルスケアから政府サービスまで、すべての活動がオンラインで利用できます。 したがって、それらはWebアプリケーションに大きく依存しています。

Webアプリケーションを使用すると、ユーザーは会社が提供するオンラインサービスを利用/楽しむことができます。 同時に、バックエンドソフトウェアへのインターフェイスとして機能します。

この入門チュートリアルでは、Apache Tapestry Webフレームワークを探索し、それが提供する基本機能を使用して単純なWebアプリケーションを作成します。

2. ApacheTapestry

Apache Tapestryは、スケーラブルなWebアプリケーションを構築するためのコンポーネントベースのフレームワークです。

これは、設定より規約パラダイムに従い、構成に注釈と命名規則を使用します。

すべてのコンポーネントは単純なPOJOです。 同時に、それらはゼロから開発され、他のライブラリに依存しません。

Tapestryには、Ajaxのサポートに加えて、優れた例外レポート機能もあります。 組み込みの共通コンポーネントの広範なライブラリも提供します。

他の優れた機能の中で、顕著なものはコードのホットリロードです。 したがって、この機能を使用すると、開発環境の変更を即座に確認できます。

3. 設定

Apache Tapestryには、Webアプリケーションを作成するための簡単なツールセットが必要です。

  • Java1.6以降
  • ビルドツール(MavenまたはGradle)
  • IDE(EclipseまたはIntelliJ)
  • アプリケーションサーバー(TomcatまたはJetty)

このチュートリアルでは、Java 8、Maven、Eclipse、およびJettyServerを組み合わせて使用します。

最新ApacheTapestryプロジェクトをセットアップするには、 Mavenアーキタイプを使用し、公式ドキュメントで提供されている手順に従います。

$ mvn archetype:generate -DarchetypeCatalog=http://tapestry.apache.org

または、既存のプロジェクトがある場合は、 tapestry-coreMaven依存関係をpom.xmlに追加するだけです。

<dependency>
    <groupId>org.apache.tapestry</groupId>
    <artifactId>tapestry-core</artifactId>
    <version>5.4.5</version>
</dependency>

セットアップの準備ができたら、次のMavenコマンドでアプリケーションapache-tapestryを起動できます。

$ mvn jetty:run

デフォルトでは、アプリは localhost:8080 /apache-tapestryからアクセスできます。

4. プロジェクト構造

ApacheTapestryによって作成されたプロジェクトレイアウトを調べてみましょう。

Mavenのようなプロジェクト構造と、規則に基づくいくつかのパッケージを見ることができます。

Javaクラスはsrc/ main / java に配置され、コンポーネントページ、およびサービスとして分類されます。

同様に、 src / main / resources はテンプレート(HTMLファイルと同様)を保持します—これらは.tml拡張子を持っています。

コンポーネントおよびページディレクトリの下に配置されたすべてのJavaクラスについて、同じ名前のテンプレートファイルを作成する必要があります。

src / main / webapp ディレクトリには、画像、スタイルシート、JavaScriptファイルなどのリソースが含まれています。 同様に、テストファイルは src /testに配置されます。

最後に、 src /siteにはドキュメントファイルが含まれます。

より良いアイデアとして、EclipseIDEで開かれたプロジェクト構造を見てみましょう。

5. 注釈

ApacheTapestryが日常的に使用するために提供するいくつかの便利な注釈について説明しましょう。 今後は、これらのアノテーションを実装で使用します。

5.1. @Inject

@Injectアノテーションはorg.apache.tapestry5.ioc.annotationsパッケージで利用可能であり、Javaクラスに依存関係を注入する簡単な方法を提供します。

このアノテーションは、アセット、ブロック、リソース、およびサービスを挿入するのに非常に便利です。

5.2. @InjectPage

org.apache.tapestry5.annotationsパッケージで利用可能な@InjectPageアノテーションを使用すると、ページを別のコンポーネントに挿入できます。 また、挿入されたページは常に読み取り専用のプロパティです。

5.3. @InjectComponent

同様に、 @InjectComponent アノテーションを使用すると、テンプレートで定義されたコンポーネントを挿入できます。

5.4. @Log

@Logアノテーションはorg.apache.tapestry5.annotationsパッケージで利用可能であり、任意のメソッドでDEBUGレベルのロギングを有効にするのに便利です。 メソッドの開始と終了をパラメータ値とともにログに記録します。

5.5. @Property

org.apache.tapestry5.annotations パッケージで利用可能な、 @Property アノテーションは、フィールドをプロパティとしてマークします。 同時に、プロパティのゲッターとセッターを自動的に作成します。

5.6. @Parameter

同様に、 @Parameter アノテーションは、フィールドがコンポーネントパラメーターであることを示します。

6. ページ

これで、フレームワークの基本機能を探求する準備が整いました。 アプリで新しいホームページを作成しましょう。

まず、 src / main /javapagesディレクトリにJavaクラスHomeを定義します。

public class Home {
}

6.1. テンプレート

次に、 src / main /resourcesの下のpagesディレクトリに対応するHome.tml templateを作成します。

拡張子が.tml(Tapestry Markup Language)のファイルは、ApacheTapestryが提供するXMLマークアップのHTML/XHTMLファイルに似ています。

たとえば、Home.tmlテンプレートを見てみましょう。

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd">
    <head>
        <title>apache-tapestry Home</title>
    </head>
    <body>
        <h1>Home</h1>
    </body>   
</html>

出来上がり! Jettyサーバーを再起動するだけで、 localhost:8080 / apache-tapestry /homeHomeページにアクセスできます。

6.2. 財産

ホームページでプロパティをレンダリングする方法を見てみましょう。

このために、Homeクラスにプロパティとgetterメソッドを追加します。

@Property
private String appName = "apache-tapestry";

public Date getCurrentTime() {
    return new Date();
}

HomeページでappNameプロパティをレンダリングするには、 ${appName}を使用するだけです。

同様に、 $ {currentTime} と記述して、ページからgetCurrentTimeメソッドにアクセスできます。

6.3. ローカリゼーション

Apache Tapestryは、統合されたローカリゼーションサポートを提供します。 慣例に従い、ページ名プロパティファイルは、ページにレンダリングするすべてのローカルメッセージのリストを保持します。

たとえば、ローカルメッセージを含むHomeページのpagesディレクトリにhome.propertiesファイルを作成します。

introMsg=Welcome to the Apache Tapestry Tutorial

メッセージのプロパティは、Javaのプロパティとは異なります。

同じ理由で、 message プレフィックスが付いたキー名は、メッセージプロパティのレンダリングに使用されます(例: $ {message:introMsg}。)。

6.4. レイアウトコンポーネント

Layout。javaクラスを作成して、基本的なレイアウトコンポーネントを定義しましょう。 ファイルはsrc/ main /javacomponentsディレクトリに保存されます。

public class Layout {
    @Property
    @Parameter(required = true, defaultPrefix = BindingConstants.LITERAL)
    private String title;
}

ここで、 title プロパティは必須とマークされており、バインディングのデフォルトのプレフィックスはリテラルStringとして設定されています。

次に、対応するテンプレートファイルLayout.tmlsrc/ main /resourcescomponentsディレクトリに書き込みます。

<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd">
    <head>
        <title>${title}</title>
    </head>
    <body>
        <div class="container">
            <t:body />
            <hr/>
            <footer>
                <p>© Your Company</p>
            </footer>
        </div>
    </body>
</html>

それでは、ホームページのレイアウトを使用してみましょう。

<html t:type="layout" title="apache-tapestry Home" 
    xmlns:t="http://tapestry.apache.org/schema/tapestry_5_4.xsd">
    <h1>Home! ${appName}</h1>
    <h2>${message:introMsg}</h2>
    <h3>${currentTime}</h3>
</html>

名前空間は、Apache Tapestryによって提供される要素( t:typeおよびt:body )を識別するために使用されることに注意してください。 同時に、名前空間はコンポーネントと属性も提供します。

ここで、 t:type は、homeページのlayoutを設定します。 また、 t:body要素はページのコンテンツを挿入します。

ホームページを次のレイアウトで見てみましょう。

7. 形

ユーザーがサインインできるように、フォームを使用してLoginページを作成しましょう。

すでに説明したように、最初にJavaクラスLoginを作成します。

public class Login {
    // ...
    @InjectComponent
    private Form login;

    @Property
    private String email;

    @Property
    private String password;
}

ここでは、emailpasswordの2つのプロパティを定義しました。 また、ログイン用にFormコンポーネントを挿入しました。

次に、対応するテンプレートlogin.tmlを作成しましょう。

<html t:type="layout" title="apache-tapestry com.example"
      xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"
      xmlns:p="tapestry:parameter">
    <t:form t:id="login">
        <h2>Please sign in</h2>
        <t:textfield t:id="email" placeholder="Email address"/>
        <t:passwordfield t:id="password" placeholder="Password"/>
        <t:submit class="btn btn-large btn-primary" value="Sign in"/>
    </t:form>
</html>

これで、 localhost:8080 / apache-tapestry /loginloginページにアクセスできます。

8. 検証

Apache Tapestryには、フォーム検証用の組み込みメソッドがいくつか用意されています。 また、フォーム送信の成功または失敗を処理する方法も提供します。

組み込みのメソッドは、イベントとコンポーネント名の規則に従います。 たとえば、メソッド onValidationFromLogin は、Loginコンポーネントを検証します。

同様に、onSuccessFromLoginonFailureFromLoginのようなメソッドは、それぞれ成功イベントと失敗イベント用です。

それでは、これらの組み込みメソッドをLoginクラスに追加しましょう。

public class Login {
    // ...
    
    void onValidateFromLogin() {
        if (email == null)
            System.out.println("Email is null);

        if (password == null)
            System.out.println("Password is null);
    }

    Object onSuccessFromLogin() {
        System.out.println("Welcome! Login Successful");
        return Home.class;
    }

    void onFailureFromLogin() {
        System.out.println("Please try again with correct credentials");
    }
}

9. アラート

適切なアラートがないと、フォームの検証は不完全です。 言うまでもなく、フレームワークにはアラートメッセージのサポートも組み込まれています。

このために、最初に LoginクラスにAlertManagerのインスタンスを挿入して、アラートを管理します。次に、printlnを置き換えます]アラートメッセージを含む既存のメソッドのステートメント:

public class Login {
    // ...
    @Inject
    private AlertManager alertManager;

    void onValidateFromLogin() {
        if(email == null || password == null) {
            alertManager.error("Email/Password is null");
            login.recordError("Validation failed"); //submission failure on the form
        }
    }
 
    Object onSuccessFromLogin() {
        alertManager.success("Welcome! Login Successful");
        return Home.class;
    }

    void onFailureFromLogin() {
        alertManager.error("Please try again with correct credentials");
    }
}

ログインに失敗したときのアラートの動作を見てみましょう。

10. Ajax

これまで、フォームを使用した単純なhomeページの作成について説明してきました。 同時に、アラートメッセージの検証とサポートも確認しました。

次に、ApacheTapestryに組み込まれているAjaxのサポートについて見ていきましょう。

まず、HomeクラスにAjaxResponseRendererおよびBlockコンポーネントのインスタンスを挿入します。 次に、Ajax呼び出しを処理するためのメソッドonCallAjaxを作成します。

public class Home {
    // ....

    @Inject
    private AjaxResponseRenderer ajaxResponseRenderer;
    
    @Inject
    private Block ajaxBlock;

    @Log
    void onCallAjax() {
        ajaxResponseRenderer.addRender("ajaxZone", ajaxBlock);
    }
}

また、Home.tmlにいくつかの変更を加える必要があります。

まず、 eventLink を追加して、onCallAjaxメソッドを呼び出します。 次に、IDがajaxZonezone要素を追加して、Ajax応答をレンダリングします。

最後に、 Home クラスに挿入され、Ajax応答としてレンダリングされるブロックコンポーネントが必要です。

<p><t:eventlink event="callAjax" zone="ajaxZone" class="btn btn-default">Call Ajax</t:eventlink></p>
<t:zone t:id="ajaxZone"></t:zone>
<t:block t:id="ajaxBlock">
    <hr/>
    <h2>Rendered through Ajax</h2>
    <p>The current time is: <strong>${currentTime}</strong></p>
</t:block>

更新されたホームページを見てみましょう。

次に、[Call Ajax]ボタンをクリックして、ajaxResponseRendererの動作を確認できます。

11. ロギング

組み込みのロギング機能を有効にするには、Loggerのインスタンスを挿入する必要があります。 次に、これを使用して、TRACE、DEBUG、INFOなどの任意のレベルでログを記録できます。

それでは、ホームクラスで必要な変更を加えましょう。

public class Home {
    // ...

    @Inject
    private Logger logger;

    void onCallAjax() {
        logger.info("Ajax call");
        ajaxResponseRenderer.addRender("ajaxZone", ajaxBlock);
    }
}

これで、[Call Ajax]ボタンをクリックすると、ロガーがINFOレベルでログに記録されます。

[INFO] pages.Home Ajax call

12. 結論

この記事では、ApacheTapestryWebフレームワークについて説明しました。

まず、クイックスタートWebアプリケーションを作成し、コンポーネントページなどのApacheTapestryの基本機能を使用してホームページを追加しました。 ]テンプレート

次に、プロパティとコンポーネント/ページインジェクションを構成するためにApacheTapestryによって提供されるいくつかの便利なアノテーションを調べました。

最後に、フレームワークによって提供される組み込みのAjaxとロギングのサポートについて説明しました。

いつものように、すべてのコード実装はGitHub利用できます。