1. 序章

Primefacesは、Java Server Faces (JSF)アプリケーション用のオープンソースUIコンポーネントスイートです。

このチュートリアルでは、Primefacesの概要を説明し、Primefacesを構成してその主な機能のいくつかを使用する方法を示します。

2. 概要

2.1. Java Server Faces

Java Server Facesは、JavaWebアプリケーションのユーザーインターフェイスを構築するためのコンポーネント指向のフレームワークです。 JSF仕様は、Java Community Processを通じて形式化され、標準化された表示テクノロジです。

Spring環境でのJSFの詳細については、ここを参照してください。

2.2. Primefaces

JSF上に構築されたPrimefacesは、任意のプロジェクトに追加できるビルド済みのUIコンポーネントを提供することにより、迅速なアプリケーション開発をサポートします。

Primefacesに加えて、 PrimefacesExtensionsプロジェクトもあります。 このコミュニティベースのオープンソースプロジェクトは、標準のコンポーネントに加えて追加のコンポーネントを提供します。

3. アプリケーションのセットアップ

いくつかのPrimefacesコンポーネントを示すために、Mavenを使用して簡単なWebアプリケーションを作成しましょう。

3.1. Maven構成

Primefacesは、jarが1つしかない軽量の構成であるため、開始するには、pom.xmlに依存関係を追加しましょう。

<dependency>
    <groupId>org.primefaces</groupId>
    <artifactId>primefaces</artifactId>
    <version>6.2</version>
</dependency>

最新バージョンはここにあります。

3.2. コントローラ–マネージドBean

次に、コンポーネントのBeanクラスを作成しましょう。

@ManagedBean(name = "helloPFBean")
public class HelloPFBean {
}

コントローラをビューコンポーネントにバインドするには、@ManagedBeanアノテーションを提供する必要があります。

3.3. 意見

最後に、。xhtmlファイルでPrimefaces名前空間を宣言しましょう。

<html xmlns:p="http://primefaces.org/ui">

4. コンポーネントの例

ページをレンダリングするには、サーバーを起動して次の場所に移動します。

http://localhost:8080/jsf/pf_intro.xhtml

4.1. PanelGrid

PanelGrid を、標準のJSF panelGrid 拡張として使用してみましょう。

<p:panelGrid columns="2">
    <h:outputText value="#{helloPFBean.firstName}"/>
    <h:outputText value="#{helloPFBean.lastName}" />
</p:panelGrid>

ここでは、2つの列を持つ panelGrid を定義し、JSFファセットからの outputText を設定して、マネージドBeanからのデータを表示します。

outputTextで宣言された値は、@ManagedBeanで宣言されたfirstNameおよびlastNameプロパティに対応します。

private String firstName;
private String lastName;

最初の単純なコンポーネントを見てみましょう。

<img class=" wp-image-32802 alignnone" style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; white-space: normal;" src="https://www.baeldung.com/wp-content/uploads/2018/04/panelGridPF-300x68.png" alt="" width="256" height="58" />

4.2. SelectOneRadio

selectOneRadioコンポーネントを使用して、ラジオボタン機能を提供できます

<h:panelGrid columns="2">
    <p:outputLabel for="jsfCompSuite" value="Component Suite" />
    <p:selectOneRadio id="jsfCompSuite" value="#{helloPFBean.componentSuite}">
        <f:selectItem itemLabel="ICEfaces" itemValue="ICEfaces" />
        <f:selectItem itemLabel="RichFaces" itemValue="Richfaces" />
    </p:selectOneRadio>
</h:panelGrid>

ラジオボタンの値を保持するには、バッキングBeanで値変数を宣言する必要があります。

private String componentSuite;

この設定により、基になるStringプロパティcomponentSuiteに関連付けられた2つのオプションのラジオボタンが作成されます。

4.3. データ表

次に、 dataTableコンポーネントを使用して、データをテーブルレイアウトで表示しましょう

<p:dataTable var="technology" value="#{helloPFBean.technologies}">
    <p:column headerText="Name">
        <h:outputText value="#{technology.name}" />
    </p:column>

    <p:column headerText="Version">
        <h:outputText value="#{technology.currentVersion}" />
    </p:column>
</p:dataTable>

同様に、テーブルのデータを保持するBeanプロパティを提供する必要があります。

private List<Technology> technologies;

ここに、さまざまなテクノロジーとそのバージョン番号のリストがあります。

4.4. InputTextを使用したAjax

p:ajaxを使用して、コンポーネントにAjax機能を提供することもできます

たとえば、このコンポーネントを使用してぼかしイベントを適用してみましょう。

<h:panelGrid columns="3">
    <h:outputText value="Blur event " />
    <p:inputText id="inputTextId" value="#{helloPFBean.inputText}}">
        <p:ajax event="blur" update="outputTextId"
	  listener="#{helloPFBean.onBlurEvent}" />
    </p:inputText>
    <h:outputText id="outputTextId" 
      value="#{helloPFBean.outputText}" />
</h:panelGrid>

したがって、Beanにプロパティを提供する必要があります。

private String inputText;
private String outputText;

さらに、AJAXblurイベント用にBeanにリスナーメソッドを提供する必要もあります。

public void onBlurEvent() {
    outputText = inputText.toUpperCase();
}

ここでは、メカニズムを示すために、テキストを大文字に変換しただけです。

4.5. ボタン

さらに、 p:commandButton 標準のh:commandButtonコンポーネントの拡張として使用することもできます。

例えば:

<p:commandButton value="Open Dialog" 
  icon="ui-icon-note" 
  onclick="PF('exDialog').show();">
</p:commandButton>

その結果、この構成では、ダイアログを開くために使用するボタンがあります( onclick 属性を使用)。

4.6. ダイアログ

さらに、ダイアログの機能を提供するために、p:dialogコンポーネントを使用できます。

最後の例のボタンを使用して、クリック時にダイアログを開きます。

<p:dialog header="Example dialog" widgetVar="exDialog" minHeight="40">
    <h:outputText value="Hello Baeldung!" />
</p:dialog>

この場合、前のセクションで説明したcommandButtonを使用してトリガーできる基本構成のダイアログがあります。

5. Primefaces Mobile

Primefaces Mobile(PFM)は、モバイルデバイス用のPrimefacesアプリケーションを作成するためのUIキットを提供します

このため、PFMは、モバイルデバイス向けに調整されたレスポンシブデザインをサポートしています。

5.1. 構成

まず、faces-config.xml内でモバイルナビゲーションサポートを有効にする必要があります。

<navigation-handler>
    org.primefaces.mobile.application.MobileNavigationHandler
</navigation-handler>

5.2. 名前空間

次に、PFMコンポーネントを使用するには、.xhtmlファイルにPFM名前空間を含める必要があります。

xmlns:pm="http://primefaces.org/mobile"

標準のPrimefacesjarの他に、構成に追加のライブラリは必要ありません。

5.3. RenderKit

最後に、モバイル環境でコンポーネントをレンダリングするために使用されるRenderKitを提供する必要があります。

アプリケーション内の単一のPFMページの場合、ページ内にRenderKitを定義できます。

<f:view renderKitId="PRIMEFACES_MOBILE" />

完全なPFMアプリケーションを使用すると、faces-config.xml内のアプリケーションスコープでRenderKitを定義できます。

<default-render-kit-id>PRIMEFACES_MOBILE</default-render-kit-id>

5.4. サンプルページ

それでは、PFMページの例を作成しましょう。

<pm:page id="enter">
    <pm:header>
        <p:outputLabel value="Introduction to PFM"></p:outputLabel>
    </pm:header>
    <pm:content>
        <h:form id="enterForm">
            <pm:field>
	        <p:outputLabel 
                  value="Enter Magic Word">
                </p:outputLabel>
	        <p:inputText id="magicWord" 
                  value="#{helloPFMBean.magicWord}">
                </p:inputText>
	    </pm:field>
            <p:commandButton 
              value="Go!" action="#{helloPFMBean.go}">
            </p:commandButton>
	</h:form>
     </pm:content>
</pm:page>

ご覧のとおり、PFMの page、header content コンポーネントを使用して、ヘッダー付きの単純なフォームを作成しました。

さらに、ユーザー入力のチェックとナビゲーションにバッキングBeanを使用しました。

public String go() {
    if(this.magicWord != null 
      && this.magicWord.toUpperCase().equals("BAELDUNG")) {
	return "pm:success";
     }
    
    return "pm:failure";
}

正しい単語の場合は、次のページに移動します。

<pm:page id="success">
    <pm:content>
        <p:outputLabel value="Correct!">
        </p:outputLabel>			
	<p:button value="Back" 
          outcome="pm:enter?transition=flow">
        </p:button>
    </pm:content>
</pm:page>

この構成により、次のレイアウトになります。

 

間違った単語の場合は、次のページに移動します。

<pm:page id="failure">
    <pm:content>
        <p:outputLabel value="That is not the magic word">
        </p:outputLabel>
	<p:button value="Back" outcome="pm:enter?transition=flow">
        </p:button>
    </pm:content>
</pm:page>

この構成により、次のレイアウトになります。

PFMはバージョン6.2では非推奨であり、応答性の高い標準キットを優先してバージョン6.3で削除されることに注意してください。

6. 結論

このチュートリアルでは、Primefaces JSFコンポーネントスイートを使用する利点を説明し、MavenベースのプロジェクトでPrimefacesを構成して使用する方法を示しました。

さらに、モバイルデバイス専用のUIキットであるPrimefacesMobileを紹介しました。

いつものように、このチュートリアルのコードサンプルはGitHub提供されています。