JSFの画面表示の部分をFaceletsで作成する。
HTMLのようにタグで記述する。
ファイル→新規ファイルからFaceletsを作成する。
プロジェクトに-warの名前のプロジェクトを選び、カテゴリ:JavaServer? FacesのJSFページを選択し、次へ。
#ref(): File not found: "jsf1.gif" at page "JSF-Faceletsの作成"
クラス名を入力し、終了をクリック。
オプションにFaceletsとJSPがありどちらも使用できるが、Faceletsの使用が推奨される。
#ref(): File not found: "jsf2.gif" at page "JSF-Faceletsの作成"
ソースコードの型枠が生成される。
#ref(): File not found: "jsf3.gif" at page "JSF-Faceletsの作成"
Faceletsのコードを入力する。
htmlタグに使用するタグライブラリを宣言する。ここでは後で使用するプレフィックス(hやcやf)をつける。
プレフィックスは標準的な名称を利用することが推奨される。
タグライブラリのURLはCtrl+Spaceで候補を表示し、入力できる。
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:f="http://xmlns.jcp.org/jsf/core"
タグはc:forEachのようにプレシックス:タグ名の形で、入力する。
forEachタグは繰り返し処理を行う。
Javaのfor(Message m: messageBoard.getMessages())と同等である。
JSFでは#{ManagedBean?名.フィールド}または#{ManagedBean?名.メソッド}で、ManagedBean?にアクセスする。
ManagedBean?名は前回@Namedアノテーションで指定した名称を使用する。(クラス名そのままではない)
h:outputTextタグで項目を表示する。表示内容はvalue属性で指定する。
f:convertDateTime?タグは、日付の文字表現を指定する。pattern属性に表記のフォーマット、timeZone属性に"JST"のような標準時を指定する。
フォーマットはSimpleDateFormatクラスのドキュメントを参照。
<c:forEach var="m" items="#{messageBoard.messages}"> <h:outputText value="#{m.id}"/>: <h:outputText value="#{m.writetime}"> <f:convertDateTime pattern="yyyy/MM/dd(E) hh:mm:ss" timeZone="JST"/> </h:outputText><br/> #{' '}<h:outputText value="#{m.message}"/><br/><br/> </c:forEach>
入力項目と送信ボタンを同じフォームに作成する。
h:inputTextareaはテキストエリアを表示するタグである。対応する項目をvalue属性に指定する。
h:commandButtonは送信ボタンを表示するタグである。action属性にボタンが押されたときに実行するManageBean?のメソッドを指定する。
<h:form> <h:inputTextarea value="#{messageBoard.message}"/><br/> <h:commandButton value="書き込む" action="#{messageBoard.writeMessage}"/> </h:form>