2.4.2. numberguess クイックスタート

numberguess クイックスタートは単純な非永続アプリケーションを作成し、JBoss EAP にデプロイする方法を示します。情報は Jakarta Server Faces ビューを使用して表示され、ビジネスロジックは 2 つの Jakarta Contexts and Dependency Injection Bean にカプセル化されます。numberguess クイックスタートでは 1 から 100 までの数字を当てるチャンスが 10 回与えられます。数字を選択した後、その数字が正解の数字よりも大きいかまたは小さいかが表示されます。

numberguess クイックスタートのコードは QUICKSTART_HOME/numberguess/ ディレクトリーにあります。QUICKSTART_HOME は JBoss EAP のクイックスタートをダウンロードし、展開したディレクトリーです。numberguess クイックスタートは複数の Bean、設定ファイル、および Facelets Jakarta Server Faces ビューによって構成され、WAR モジュールとしてパッケージ化されています。

コマンドラインを使用してこのクイックスタートをビルドしデプロイする手順の詳細については、numberguess クイックスタートディレクトリーのルートにある README.html ファイルを参照してください。以下の例では、Red Hat CodeReady Studio を使用してクイックスタートを実行します。

前提条件
  • Red Hat CodeReady Studio をインストールします。手順については、Red Hat CodeReady Studio『Installation Guide』の「Installing CodeReady Studio stand-alone using the Installer」を参照してください。
  • numberguess クイックスタートを実行します。手順については、「Red Hat CodeReady Studio でのクイックスタートの実行」を参照し、手順の helloworldnumberguess に置き換えてください。
  • Web ブラウザーを開いて http://localhost:8080/numberguess でアプリケーションにアクセスし、numberguess クイックスタートが正常に JBoss EAP にデプロイされたことを確認します。
設定ファイルの確認

このサンプルのすべての設定ファイルは、クイックスタートの QUICKSTART_HOME/numberguess/src/main/webapp/WEB-INF/ ディレクトリーにあります。

  1. faces-config.xml ファイルを確認します。

    本クイックスタートは faces-config.xml ファイル名の Jakarta Server Faces 2.2 バージョンを使用します。Facelets の標準的なバージョンが Jakarta Server Faces 2.2 のデフォルトのビューハンドラーであるため、設定は必要ありません。このファイルはルート要素のみで構成され、JSF をアプリケーションで有効にする必要があることを示すマーカーファイルにすぎません。

    <faces-config version="2.2"
       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-facesconfig_2_2.xsd">
    
    </faces-config>
  2. beans.xml ファイルを確認します。

    beans.xml ファイルには、1.1 のバージョン番号と allbean-discovery-mode が含まれます。このファイルは WAR を Bean アーカイブとして識別するマーカーファイルで、JBoss EAP がこのアプリケーションで Bean を検索し、Jakarta Contexts and Dependency Injection をアクティベートするよう指示されます。

    <beans 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/beans_1_1.xsd"
        bean-discovery-mode="all">
    </beans>
注記

このクイックスタートは web.xml ファイルを必要としません。

2.4.2.1. Jakarta Server Faces コードの確認

Jakarta Server Faces はソースファイルに .xhtml ファイル拡張子を使用しますが、レンダリングされたビューは .jsf 拡張子で提供されます。home.xhtml ファイルは src/main/webapp/ ディレクトリーにあります。

例: Jakarta Server Faces のソースコード

19<html xmlns="http://www.w3.org/1999/xhtml"
20	xmlns:ui="http://java.sun.com/jsf/facelets"
21	xmlns:h="http://java.sun.com/jsf/html"
22	xmlns:f="http://java.sun.com/jsf/core">
23
24	<head>
25	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
26	<title>Numberguess</title>
27	</head>
28
29	<body>
30	<div id="content">
31		<h1>Guess a number...</h1>
32		<h:form id="numberGuess">
33
34		<!-- Feedback for the user on their guess -->
35	<div style="color: red">
36		<h:messages id="messages" globalOnly="false" />
37		<h:outputText id="Higher" value="Higher!"
38 		  rendered="#{game.number gt game.guess and game.guess ne 0}" />
39		<h:outputText id="Lower" value="Lower!"
40		   rendered="#{game.number lt game.guess and game.guess ne 0}" />
41	</div>
42
43	<!-- Instructions for the user -->
44	<div>
45	I'm thinking of a number between <span
46	id="numberGuess:smallest">#{game.smallest}</span> and <span
47	id="numberGuess:biggest">#{game.biggest}</span>. You have
48	#{game.remainingGuesses} guesses remaining.
49	</div>
50
51	<!-- Input box for the users guess, plus a button to submit, and reset -->
52	<!-- These are bound using EL to our Jakarta Contexts and Dependency Injection beans -->
53	<div>
54	Your guess:
55	<h:inputText id="inputGuess" value="#{game.guess}"
56		required="true" size="3"
57		disabled="#{game.number eq game.guess}"
58		validator="#{game.validateNumberRange}" />
59		<h:commandButton id="guessButton" value="Guess"
60			action="#{game.check}"
61			disabled="#{game.number eq game.guess}" />
62	</div>
63	<div>
64	<h:commandButton id="restartButton" value="Reset"
65	action="#{game.reset}" immediate="true" />
66	</div>
67	</h:form>
68
69	</div>
70
71	<br style="clear: both" />
72
73	</body>
74</html>

以下の行番号は、Red Hat CodeReady Studio でファイルを表示するときに示されるものに対応します。

表2.2 Jakarta Server Faces の詳細

注記

36〜40

これらはユーザーに送信できるメッセージ、「Higher」(より大きい) と「Lower」(より小さい) です。

45〜48

ユーザーが数を選択するごとに数字の範囲が狭まります。有効な数の範囲が分かるようにこの文章は変更されます。

55〜58

この入力フィールドは値式を使用して Bean プロパティーにバインドされます。

58

ユーザーが誤って範囲外の数字を入力しないようにバリデーターのバインディングが使用されます。バリデーターがないと、ユーザーが範囲外の数字を使用する可能性があります。

59〜61

ユーザーの選択した数字をサーバーに送る方法がなければなりません。ここでは、Bean 上のアクションメソッドをバインドします。