[検証実験]Webシステム開発の効率化を検証する

第2回 仕様変更とフレームワーク効果




仕様変更に対応する

 さて、サンプルアプリケーションが動いたところで、仕様を少しだけ変えてプログラミングを試してみましょう。

 現在の仕様では、画面に登録メンバーの身長、体重が表示されるため、自分の身長、体重がほかの人にばれてしまいます。これでは女性には使ってもらえませんので、取りあえず、
メンバーの属性に性別を加え、女性であれば、メンバー表の身長と体重の表示を伏字にする」 とし、配慮の気配を少しだけ漂わせることにします。

 作業は次のようになります。

  • データベースの「メンバー」表に「性別」列を追加
  • 画面1のメンバー表と登録部分に、性別欄を追加
  • 画面1のメンバー表で、性別が女性の場合、身長と体重を「***」と表示
  • 画面2のメンバー情報部分に、性別欄を追加

データベースの変更

 「メンバー」表に「性別」列を追加します。列名を「性別」とし、CHAR(2)、NOT NULL で定義します(実際の値は “男”か“女” かにします)。

氏名 VARCHAR(30) NOT NULL
身長 NUMERIC(3,0) NOT NULL
体重 NUMERIC(3,0) NOT NULL
性別 CHAR(2) NOT NULL

 適宜、テーブルを再作成してください。

画面1の変更

 変更作業の内容と、意味について説明していきます。

1 100行目、体重の行の次に、次の2行を追加します。登録用の表(下側の表)で、性別の値をプルダウンメニューで表示するよう、Web入出力用オブジェクトを設定しています。

hMember.getField("性別").setFieldType(HtmlFieldType.INPUT_SELECT);
hMember.getField("性別").setSelectValues(new String[]{"", "男", "女"});

2 116行目、氏名の行の直後に以下の行を追加します(追加する場所は if (e.getSource().equals(hMembersList)) の条件文の中です)。メンバー表(上側の表)で、性別が女性の場合には、身長と体重欄に「***」を、男性であれば値を表示するように、Web入出力用オブジェクトを設定しています。

if ("女".equals(rsMembersList.getValueAsString(index, rsMembersList.getColumnSet().indexOf("性別")))) {
  hMembersList.getField("身長").setFieldType(HtmlFieldType.DISPLAY_CONSTANT);
  hMembersList.getField("身長").setConstantString("***");
  hMembersList.getField("体重").setFieldType(HtmlFieldType.DISPLAY_CONSTANT);
  hMembersList.getField("体重").setConstantString("***");
} else {
  hMembersList.getField("身長").setFieldType(HtmlFieldType.DISPLAY_DATA);
  hMembersList.getField("体重").setFieldType(HtmlFieldType.DISPLAY_DATA);
}

3 データベースにPostgreSQLを使う場合は、PostgreSQL用ソースの144行目、体重の行の次に、1行追加します。データベースの「性別」列はNOT NULLで定義していますが、PostgreSQLではNULL不可などの情報が問い合わせ結果に含まれないため、表データオブジェクトに明示的に設定する必要があります。これにより、ユーザーが未入力や未選択のままサーバに送信すると、自動的にエラーメッセージが表示されます(ORACLEやDB2を使う場合は、これらの情報は自動設定されます)。

rsMember.getColumn("性別").setNullable(false);

 次に、Member.jspに変更を加えます。

4 16行目、体重の行の次に、1行追加します。メンバー表(上側の表)での性別の値表示を、右寄せに設定しています。

Form.setFieldDataTDAttribute(hMembersList, "性別", "align=\"right\"");

5 44行目、体重の行の次に、1行追加します。メンバー表(上側の表)の列見出しに「性別」を追加しています。

<th width="60" nowrap><b>性別</b></th>

6 79行目、体重の列設定の次に、以下の行を追加します。メンバー登録のための表(下側の表)に性別用の行を追加しています。

<tr>
  <th width="40" nowrap align="center" bgcolor="pink">
    <b>性別</b>
  </th>
  <td width="100" nowrap align="left" bgcolor="lightblue">
    <%=Form.getFieldDataAt(hMember, 0 , "性別")%>
  </td>
</tr>

画面2の変更

 変更内容は次のとおりです。まず、CalorieNoteListForm.javaに変更を加えます。

1 127行目、体重の行の次に、次の2行を追加します。メンバー情報の表(上側の表)で、性別の値をプルダウンメニューで表示するよう、Web入出力用オブジェクトを設定しています。

hMember.getField("性別").setFieldType(HtmlFieldType.INPUT_SELECT);
hMember.getField("性別").setSelectValues(new String[]{"男", "女"});

 次に、CalorieNoteList.jspに変更を加えます。

2 69行目、体重の列設定の次に、次の行を追加します。メンバー情報の表(上側の表)に性別用の行を追加しています。

<tr>
  <th width="40" nowrap align="center" bgcolor="pink">
    <b>性別</b>
  </th>
  <td width="100" nowrap align="left" bgcolor="lightblue">
    <%=Form.getFieldDataAt(hMember, 0 , "性別")%>
  </td>
</tr>

 以上で対応作業は終わりです。最後に、以下の作業を行います。

1 新しいWebモジュールの生成と配備を行います。Forteで変更を保存した後、[エクスプローラ]ウィンドウのWEB-INFのところで右クリックし、「配備」を選びます。

2 iWS上にあるJSPの古いキャッシュファイルを削除します。JSPを変更していますので、この作業が必要です。方法は2種類あります。

  • iWS ディレクトリ下、https-ホスト名\ClassCacheディレクトリにある「Version」ファイルを直接削除(今回の例では、F:\iPlanet\Servers\https-testsrv\ClassCache\Version、Linux環境では/usr/iplanet/servers/https-testsrv/ClassCache/Version)。

  • iWSの管理サーバを起動して、アクセスし(今回の例では、ポート8888)、[Servers]タブ画面で <Manage Servers> の「Manager」ボタンをクリック。[Java]タブをクリックし、画面左側の「Session Data/JSP Class Cache」をクリック。<Delete JSP Class Cache Files> にチェックし、「OK」ボタンをクリック。確認メッセージのウィンドウが表示されるので、「OK」ボタンをクリック。

3 iWSを再起動し、ブラウザからサンプルアプリケーションを実行します。

 性別欄が表示されましたでしょうか(画面17)。表示されない場合は、ブラウザの更新ボタンをクリックしてみてください。

画面17

 メンバーを登録し、女性の場合はメンバー表の身長と体重が“***”と表示され、男性の場合は値が表示されればOKです(画面18)

画面18

 第2回はここまでとなります。次回(最終回)は、今回ご紹介したサンプルアプリケーションを振り返って、フレームワークの効果を整理します。

4/4  

 INDEX

[検証実験]Webシステム開発の効率化を検証 第2回

  Page1
カロリー計算アプリケーション
環境を準備する 
  Page2
データベースの準備
サンプルアプリケーションの構造
  Page3
Webモジュールの生成と配備、実行
  Page4
仕様変更に対応する
  


Java Solution全記事一覧






Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間