jakaruta.doc_013
R e i - D r e a m
for Laravel
TOP > Jakarta_EE10 > UIコンポーネント(詳細)
Guest
login

最終投稿日:2026年07月19日

UIコンポーネント(詳細)
h:head
サンプル

<h:head id="sampleHead"> ~ </h:head>

描画結果

<head id="indexHead"> ~ </head>

ポイント

ID属性名を付与する事ができます。
主に「JavaScript(Ajax)を使って、特定の部分だけを書き換えることができます。

またサンプル内で記述しているCSSのクラス名やJSを発火させたい場合は、以下を追記してください。
    <h:outputStylesheet library="css" name="style.css" />
    <h:outputScript library="js" name="base.js" />

h:form
サンプル

<h:form id="hoge" enctype="multipart/form-data" prependId="false">
</h:form>

描画結果

<form id="hoge" name="hoge" method="post" action="/jakaruta-pj/sample.xhtml" enctype="multipart/form-data">
</form>

ポイント

jacarutaの特性として『method="post" action="{自画面}"』は必須です。
これは「sample.xhtml」「SampleBean.java」が密接な関係にあるためです。

h:inputText
サンプル

<h:inputText id="inpText" value="#{sampleBean.name}" styleClass="parts_text" style="width:300px;height:25px;" />

描画結果

<input id="inpText" type="text" name="inpText" value="初期値としての名前" class="parts_text" style="width:300px;height:25px;" />

ポイント

[id][name]属性の値に何やら不思議な文字『j_idt6:』が接頭辞の様に付与されています。
これは《form》タグの『ID属性値』です。
そんな値を設定した覚えはないと思いますが、そもそも[form]タグに[id]を指定していません。
この場合はシステムが勝手にランダムに値を決めてしまいます。

これが気に入らない場合は『<form id="hoge">』の様に指定する事で以下の様になります。
<input id="hoge:inpText" ...
また、接頭辞自体不要の場合は『<form id="hoge" prependId="false">』とする事で適用できます。

h:inputTextarea
サンプル

<h:inputTextarea id="area" value="#{sampleBean.name}" styleClass="parts_text" style="width: 300px; height: 150px; resize: none;" />

描画結果

<textarea id="area" name="area" class="parts_text" style="width: 300px; height: 150px; resize: none;">
    初期値としての名前
</textarea>

h:inputFile
サンプル

<h:inputFile id="file" value="#{sampleBean.name}" />

描画結果

<input id="file" type="file" name="file" />

ポイント

ファイルを扱う場合『<form enctype="multipart/form-data">』とします。
描画結果に『value="#{sampleBean.name}"』はありませんが、
JAVA側でアップロードファイルを処理するため必要な属性となります。

h:outputText
サンプル

<h:outputText id="outText" value="#{sampleBean.name}" />

描画結果

<span id="outText">初期値としての名前</span>

h:outputLabel
サンプル

<h:outputLabel for="inpText" value="ユーザー名:" />

描画結果

<label for="inpText">ユーザー名:</label>
※「id = "inpText"」のUIと紐付く

h:graphicImage
サンプル

<h:graphicImage library="img" name="bluesky_1.png" alt="SNSロゴ" />

描画結果

<img src="/jakaruta-pj/jakarta.faces.resource/bluesky_1.png.xhtml?ln=img" alt="SNSロゴ" />

h:outputStylesheet
サンプル

<h:outputStylesheet library="css" name="style.css" />

描画結果

<link rel="stylesheet" href="/jakaruta-pj/jakarta.faces.resource/style.css.xhtml?ln=css" />

h:outputScript
サンプル

<h:outputScript library="js" name="base.js" />

描画結果

<script src="/jakaruta-pj/jakarta.faces.resource/base.js.xhtml?ln=js"></script>

h:commandLink
サンプル

<h:commandLink id="link_1" value="詳細ページへ移動する" action="#{sampleBean.submit()}" />

描画結果

<a id="link_1" href="#" onclick="mojarra.cljs(document.getElementById('hoge'),{'link_1':'link_1'},'');return false">詳細ページへ移動する</a>

ポイント

描画結果の『link_1』は、自身のタグのIDです。
『hoge』は『<h:form id="hoge">』の部分です。
クリックすると『action="#{sampleBean.submit()}"』へ処理が渡されます。
また、引数のない関数の場合「()」は省略する事が可能です。

h:link
サンプル

<h:link id="get_link" value="nextへ(GET)" outcome="next">
    <f:param name="hoge" value="123" />
    <f:param name="foo" value="987" />
</h:link>

描画結果

<a id="get_link" name="get_link" href="/jakaruta-pj/next.xhtml?hoge=123&foo=987">nextへ(GET)</a>

ポイント

『<f:param name="hoge" value="123" />』で、リンクにGETパラメータを付与できます。
また「f」タグを利用する場合は、HTMLタグに以下宣言が必要です。
  『xmlns:f="jakarta.faces.core"』

h:outputLink
サンプル

<h:outputLink value="https://reidream.net" target="_blank">
    [ReiDream]へ
</h:outputLink>

描画結果

<a href="https://reidream.net" target="_blank">
    [ReiDream]へ
</a>

h:selectBooleanCheckbox
サンプル①

<h:selectBooleanCheckbox id="agree_no_check" value="#{sampleBean.agree}" />
<h:outputLabel for="agree_no_check" value="同意する。" />

描画結果①

<input id="agree_no_check" type="checkbox" name="agree_no_check" />
<label for="agree_no_check">同意する。</label>

サンプル②

<h:selectBooleanCheckbox id="agree_check" value="#{sampleBean.agree}">
    <f:ajax execute="@this" render="msg_area" />
</h:selectBooleanCheckbox>
<h:panelGroup id="msg_area">
    <h:outputText value="同意されています!" rendered="#{sampleBean.agree}" style="color:green;font-weight: bold;" />
    <h:outputText value="同意されていません。" rendered="#{not sampleBean.agree}" style="color:red;font-weight: bold;" />
</h:panelGroup>

描画結果②

<input id="agree_check" type="checkbox" name="agree_check" onclick="mojarra.ab(this,event,'valueChange','@this','msg_area')" />
<span id="msg_area">
    <span style="color:red;font-weight: bold;">同意されていません。</span>
</span>

ポイント

AJAX処理により変数『agree』の値を変更し、結果メッセージの内容が変化します。
また「f」タグを利用する場合は、HTMLタグに以下宣言が必要です。
  『xmlns:f="jakarta.faces.core"』

h:selectManyCheckbox
サンプル

<div style="width:400px;">
    <h:selectManyCheckbox id="chk_list" value="#{sampleBean.myList}" styleClass="grid-checkbox">
        <f:selectItem itemValue="1" itemLabel="読書" />
        <f:selectItem itemValue="2" itemLabel="映画" />
        <f:selectItem itemValue="3" itemLabel="洗濯" />
        <f:selectItem itemValue="4" itemLabel="旅行" />
        <f:selectItem itemValue="5" itemLabel="賭博" />
    </h:selectManyCheckbox>
</div>

描画結果

<div style="width:400px;">
    <table id="chk_list" class="grid-checkbox">
        <tr>
            <td><input name="chk_list" id="chk_list:0" value="1" type="checkbox" /><label for="chk_list:0" class=""> 読書</label></td>
            <td><input name="chk_list" id="chk_list:1" value="2" type="checkbox" /><label for="chk_list:1" class=""> 映画</label></td>
            <td><input name="chk_list" id="chk_list:2" value="3" type="checkbox" /><label for="chk_list:2" class=""> 洗濯</label></td>
            <td><input name="chk_list" id="chk_list:3" value="4" type="checkbox" /><label for="chk_list:3" class=""> 旅行</label></td>
            <td><input name="chk_list" id="chk_list:4" value="5" type="checkbox" /><label for="chk_list:4" class=""> 賭博</label></td>
        </tr>
    </table>
</div>

ポイント

サンプルの『layout="plain" styleClass="grid-checkbox"』ですが、
縦並びする場合は『layout="pageDirection"』とし、[grid-checkbox]も不要です。

横並びが厄介で、JSF時代の『layout="pageDirection" columns="3"』が使えない様です。
そこで[style]属性で強引にレイアウトを整えます。
    ※『class="grid-checkbox"』の部分で制御しています

h:selectOneRadio
サンプル

<h:selectOneRadio id="my_youbi" value="#{sampleBean.name}">
    <f:selectItem itemValue="1" itemLabel="月曜日" />
    <f:selectItem itemValue="2" itemLabel="火曜日" />
    <f:selectItem itemValue="3" itemLabel="水曜日" />
    <f:selectItem itemValue="4" itemLabel="木曜日" />
    <f:selectItem itemValue="5" itemLabel="金曜日" />
    <f:selectItem itemValue="6" itemLabel="土曜日" />
    <f:selectItem itemValue="7" itemLabel="日曜日" />
</h:selectOneRadio>

描画結果

<table id="my_youbi">
    <tr>
        <td><input type="radio" name="my_youbi" id="my_youbi:0" value="1" /><label for="my_youbi:0"> 月曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:1" value="2" /><label for="my_youbi:1"> 火曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:2" value="3" /><label for="my_youbi:2"> 水曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:3" value="4" /><label for="my_youbi:3"> 木曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:4" value="5" /><label for="my_youbi:4"> 金曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:5" value="6" /><label for="my_youbi:5"> 土曜日</label></td>
        <td><input type="radio" name="my_youbi" id="my_youbi:6" value="7" /><label for="my_youbi:6"> 日曜日</label></td>
    </tr>
</table>
    ※要素の制御は『h:selectManyCheckbox』と同じです

h:panelGrid・h:panelGrid
サンプル

<h:panelGrid columns="2" border="1">
    <h:outputLabel value="名前" />
    <h:inputText value="#{sampleBean.name}" />
    
    <h:outputLabel value="性別" />
    <h:panelGroup>
        <h:selectOneRadio value="#{sampleBean.name}">
            <f:selectItem itemValue="1" itemLabel="男" />
            <f:selectItem itemValue="2" itemLabel="女" />
        </h:selectOneRadio>
    </h:panelGroup>
</h:panelGrid>

描画結果

<table border="1">
    <tbody>
        <tr>
            <td><label>名前</label></td>
            <td><input type="text" name="j_idt77" value="初期値としての名前" /></td>
        </tr>
        <tr>
            <td><label>性別</label></td>
            <td>
                <table>
                    <tr>
                        <td>
                            <input type="radio" name="j_idt80" id="j_idt80:0" value="1" /><label for="j_idt80:0"> 男</label>
                        </td>
                        <td>
                            <input type="radio" name="j_idt80" id="j_idt80:1" value="2" /><label for="j_idt80:1"> 女</label>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </tbody>
</table>

h:dataTable
DB取得リストを一覧表にするのに便利です。
サンプル

<h:dataTable value="#{sampleBean.userList}" var="user" binding="#{myTable}" border="1">
    <h:column>
        <f:facet name="header">行数</f:facet>
        #{myTable.rowIndex + 1}
    </h:column>
    <h:column>
        <f:facet name="header">user</f:facet>
        #{user.user}
    </h:column>
    <h:column>
        <f:facet name="header">suuti</f:facet>
        #{user.suuji}
    </h:column>
</h:dataTable>

描画結果

<table border="1">
    <thead>
        <tr>
            <th scope="col">行数</th>
            <th scope="col">user</th>
            <th scope="col">suuti</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>ほげ</td>
            <td>0</td>
        </tr>
        <tr>
            <td>2</td>
            <td>ほげ</td>
            <td>1</td>
        </tr>
        <tr>
            <td>3</td>
            <td>ほげ</td>
            <td>2</td>
        </tr>
    </tbody>
</table>

ポイント

項目「行数」はDBの値ではなく、実際の一覧表の行数となります。
これを実現するために『binding="#{myTable}"』と定義し、表全体を「myTable」オブジェクトでバインドします。
すると『myTable.rowIndex』で描画している行数が取得できます。

h:message
項目1つと紐付けるエラーメッセージです。
サンプル

<h:message id="reqText_message" for="reqText" style="color:red;font-weight:bold;display: block;" />
<h:inputText id="reqText" value="#{sampleBean.name}" required="true" requiredMessage="ユーザー名を入力してください!" />

描画結果(通常)

<span id="reqText_message"></span>
<input id="reqText" type="text" name="reqText" value="初期値としての名前" />

描画結果(エラー)

<span id="reqText_message" style="color:red;font-weight:bold;display: block;">
    ユーザー名を入力してください!
</span>
<input id="reqText" type="text" name="reqText" value="" />

h:messages
画面内と紐付けるを表示するエラーメッセージです。
複数のUIの属性に『required="true" requiredMessage="エラー内容"』を追記してみて下さい。
サンプル

<h:messages globalOnly="false" showSummary="true" showDetail="false" style="color:red;font-weight:bold;list-style-type:square;" />

描画結果(エラー)

<ul style="color:red;font-weight:bold;list-style-type:square;">
    <li>男女を選択してください。 </li>
    <li>ユーザー名を入力してください!</li>
</ul>

ポイント

エラーの中黒点を消したい場合は、style部を『list-style-type:none;』に変更してください。
[globalOnly="true"]は、全てのエラーを出力しますが、[false]とすると、
    Java側で『context.addMessage(null, ...)』と、第1引数を[null]にしたエラーのみ表示となる。
[showSummary="true"][showDetail="false"]は、エラー《概要|詳細》のどちらを表示するかの設定です。
    Java側で『new FacesMessage("サマリー", "ディテール")』と設定できたりします。

f:param
例えば、押下されたボタンを識別するのに便利です。
サンプル

<h:form>
    <h:commandButton value="下書き" action="#{sampleBean.submit()}">
        <f:param name="actionType" value="DRAFT" />
    </h:commandButton>
    
    <h:commandButton value="送信して保存" action="#{sampleBean.submit()}">
        <f:param name="actionType" value="SAVE" />
    </h:commandButton>
</h:form>

JAVA側では、以下の様に参照できます。
参照方法

public String submit() {
    // リクエストパラメータから "actionType" を取得
    String actionType = FacesContext.getCurrentInstance()
        .getExternalContext().getRequestParameterMap().get("actionType");
}

ログインしてコメントを残そう!!


レンズモード 【新規購入限定用】
きっぷる