2.4.2. numberguess クイックスタート
numberguess クイックスタートは単純な非永続アプリケーションを作成し、JBoss EAP にデプロイする方法を示します。情報は JSF ビューを使用して表示され、ビジネスロジックは 2 つの CDI Bean にカプセル化されます。numberguess クイックスタートでは 1 から 100 までの数字を当てるチャンスが 10 回与えられます。数字を選択した後、その数字が正解の数字よりも大きいかまたは小さいかが表示されます。
numberguess クイックスタートのコードは QUICKSTART_HOME/numberguess/ ディレクトリーにあります。QUICKSTART_HOME は JBoss EAP のクイックスタートをダウンロードし、展開したディレクトリーです。numberguess クイックスタートは複数の Bean、設定ファイル、および Facelets (JSF) ビューによって設定され、WAR モジュールとしてパッケージ化されています。
コマンドラインを使用してこのクイックスタートをビルドしデプロイする手順の詳細については、numberguess クイックスタートディレクトリーのルートにある README.html ファイルを参照してください。以下の例では、Red Hat CodeReady Studio を使用してクイックスタートを実行します。
前提条件
- Red Hat CodeReady Studio をインストールします。手順については、Red Hat CodeReady StudioInstallation Guideの Installing CodeReady Studio stand-alone using the Installer を参照してください。
-
numberguessクイックスタートを実行します。手順については、Red Hat CodeReady Studio でのクイックスタートの実行 を参照し、手順のhelloworldをnumberguessに置き換えてください。 -
Web ブラウザーを開いて
http://localhost:8080/numberguessでアプリケーションにアクセスし、numberguess クイックスタートが正常に JBoss EAP にデプロイされたことを確認します。
設定ファイルの確認
このサンプルのすべての設定ファイルは、クイックスタートの QUICKSTART_HOME/numberguess/src/main/webapp/WEB-INF/ ディレクトリーにあります。
faces-config.xmlファイルを確認します。本クイックスタートは
faces-config.xmlファイル名の JSF 2.2 バージョンを使用します。Facelets の標準的なバージョンが JSF 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>beans.xmlファイルを確認します。beans.xmlファイルには、1.1 のバージョン番号とallのbean-discovery-modeが含まれます。このファイルは、WAR を Bean アーカイブとして識別し、JBoss EAP がこのアプリケーションで Bean を検索し、CDI をアクティベートするよう指示するマーカーファイルです。<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. JSF コードの確認
JSF はソースファイルに .xhtml ファイル拡張子を使用しますが、レンダリングされたビューは .jsf 拡張子で提供されます。home.xhtml ファイルは src/main/webapp/ ディレクトリーにあります。
例: JSF ソースコード
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 CDI 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 JSF の詳細
| 行 | 注記 |
|---|---|
| 36〜40 | これらはユーザーに送信できるメッセージ、Higher(より大きい) と Lower(より小さい) です。 |
| 45〜48 | ユーザーが数を選択するごとに数字の範囲が狭まります。有効な数の範囲が分かるようにこの文章は変更されます。 |
| 55〜58 | この入力フィールドは値式を使用して Bean プロパティーにバインドされます。 |
| 58 | ユーザーが誤って範囲外の数字を入力しないようにバリデーターのバインディングが使用されます。バリデーターがないと、ユーザーが範囲外の数字を使用する可能性があります。 |
| 59〜61 | ユーザーの選択した数字をサーバーに送る方法がなければなりません。ここでは、Bean 上のアクションメソッドをバインドします。 |