チェックボックス(有無フラグ)

最終更新日: 2023年12月12日
R8 | R9

背景

Wagbyが提供するチェックボックスは、別テーブルで値を管理します。これは複数のチェックボックスが選択されることを想定しているためです。

しかし「ユーザーインタフェースはチェックボックスだが、テーブルには一つの値を保持したい(別テーブルに分割する必要がない)」というケースがあります。
具体的には、「有無フラグ」のような二値の状態を保持するものです。

そこで Wagby では、内部ではラジオボタンとする(一つの値だけを保持する)が、ユーザーインタフェースではチェックボックスを表示することができます。
ここではその方法を説明します。

選択肢モデルを参照する

「顧客」モデルの「挨拶状」項目には一つのチェックボックスが用意されています。

挨拶状項目を含んだ顧客更新画面

定義方法

  1. 選択肢モデル「有無マスタ」を事前に用意します。モデルID/モデル名は任意です。主キーの型は数値とします。
    有無状態を管理する選択肢モデル
  2. 初期データを設定します。ここではID「0」を「無」、ID「1」 を「有」とします。
    有無状態に対応したID
  3. 顧客モデルに「挨拶状」という項目を用意します。「この値が選択された顧客へは挨拶状を送付する」という運用を想定します。
    顧客モデル
  4. 「挨拶状」項目はラジオボタンにします。この設定により、生成されるテーブルには数値を管理するカラムが1つ用意されます。
    挨拶状項目の型の設定
  5. 「入力制御 > モデル参照」の設定で「ラジオボタンをチェックボックスで表示する」を有効にします。
    さらに「チェックボックスの値」で、選択状態の値を指定します。今回の例では「有」は「1」ですので「1」を指定します。
    ラジオボタンをチェックボックスで表示する
    この設定を行うと、クリアボタンは用意されません。上の図では「クリアボタンを作成する」が有効になっていますが、この設定は無視されます。

初期値の設定

ここまでの設定で、画面上で項目を選択(チェック)するとサーバに値が送信されるようになりますが、Webアプリケーションでは送信される値は常に文字列です。
Wagbyでは通常、型の変換は適切に行われるため開発者が意識する必要はありません。
しかし、今回のケースは「内部的にはラジオボタンだが、見た目はチェックボックス」という仕組みであるため、明示的な型変換処理を設定する必要があります。

具体的には、登録時と更新時の初期値に次の式を設定します。

IF(ISBLANK(REQUEST()), 0, TOINT(REQUEST()))
初期値の設定

REQUEST関数は入力パラメータを意味します。戻り値は文字列型です。これに TOINT 関数を通すことで数値型に変換します。ISBLANK関数は値が空かどうかを判定します。

チェックボックスを選択しなかった場合、サーバに値は送信されません。つまり「値が送信されないか、"1" という文字列が送信されるか」になります。この式では、値が送信されなかった場合は 0 を、値が送信された場合は文字列の "1" を数値に変換することで、適切な値に変換しています。

ストアモデルを参照する

選択肢モデルではなく、通常のモデルを利用する例です。

有無モデルの値を事前に用意しておきます。

有無モデルの値を設定しておく

挨拶状項目はチェックボックスとして操作できます。

挨拶状項目を含んだ顧客登録画面

定義方法

  1. 有無状態を管理するモデルを次の通り定義します。 モデルID/モデル名は任意です。ここでは主キーの型は文字列型とします。
    有無状態を管理するモデル
  2. 顧客モデルの挨拶状項目の参照先モデルを、上で用意したモデルとします。
    挨拶状項目の参照先モデルの設定
  3. 「入力制御 > モデル参照」の設定で「ラジオボタンをチェックボックスで表示する」を有効にします。
    あわせて「チェックボックスの値」で、選択状態の値を指定します。今回も「有」を「1」として扱うようにします。
    ラジオボタンをチェックボックスで表示する
  4. 初期値の式を設定します。
    参照先モデルの主キーが文字列型なので、文字列型の「0」と「1」が格納されるようにします。
    IF(ISBLANK(REQUEST()), "0", REQUEST())
    初期値の設定

変更履歴と併用する場合の注意点

繰り返しコンテナでデータの変更履歴を管理する機能と併用する場合、注意が必要です。

上の例ではチェック「なし」の場合、入力値が空白になります。しかし既存データには "無" という文字が設定されているため、"無が削除されました" という変更履歴が残ってしまいます。

対策

customize/resources/changelog_ja.properties.UTF8 を用意します。次の書式で対象モデルおよび項目を指定します。

<モデルID>.<項目>=replaceblank:無

例えば model1 の item1 項目であれば model1.item1=replaceblank:無 とします。"無" の文字は図2の「内容」部分に設定した文字列としてください。

ビルド後のアプリケーション wagbyapp の WEB-INF/classes フォルダに changelog_ja.properties が生成されます。

仕様・制約

  • この設定はモバイル画面(スマートフォン)ではご利用いただけません。