SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

OSSフレームワーク「dataforms.jar」でサンプルプログラムを構築する(1)

HTMLの作成

開発ツールを使ったHTMLの作成

 ここまでの作業で作成したArticlePageを元にHTMLを作成します。Pageとその中に配置されたForm、Field等のクラスは、全てWebComponentというクラスから派生しています。WebComponentから派生したクラスのうち、PageとDialogクラスは対応するWebリソースとしてHTMLを作成することができます。[開発ツール][Webリソース作成]ページを表示し[機能]で[/bbs]を選択、[ページクラス名]にArticlePageクラスを指定して検索すると、以下のようにArticlePage中で使用されている各種クラスが表示されます。

Page内の各種クラスの検索
Page内の各種クラスの検索

 先頭にArticlePageが表示されているので、それをクリックすると、[Webリソース作成]ダイアログが表示されます。今回は[フォームは別ファイルに出力]をチェックしてから、HTMLの[作成]ボタンを押下します。

HTMLの生成
HTMLの生成

 [フォームは別ファイルに出力]をチェックすると、ArticlePage.html以外に、それぞれのフォームの内容が 「ArticleQueryForm.html」「ArticleQueryResultForm.html」「ArticleEditForm.html」に出力されます。今回なぜフォームを別ファイルに出力するかというと、ArticleEditFormを別のページに配置して流用する予定があるからです。

 それぞれのHTMLの出力結果を以下に示します。

ArticlePage.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <div id="mainDiv">
      <form id="queryForm">
      </form>
      <form id="queryResultForm">
      </form>
      <form id="editForm">
      </form>

    </div>
  </body>
</html>

 フォームを別ファイルに出力しているため、Pageに対応するHTMLには内容が空の<form>タグが出力されます。ArticleQueryFormクラスのIDは「queryForm」が設定されます。Pageの初期化処理は、ArticleQueryFormに対応する「ArticleQueryForm.html」が存在した場合、<form id="queryForm"></form>の内容に「ArticleQueryForm.html」の内容を展開するようになっています。

ArticleQueryForm.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <form id="queryForm">
      <div class="formHeader">検索条件</div>
      <table class="responsive">
        <tbody>
          <tr>
            <th>記事タイトル</th>
            <td><input type="text" id="title" /></td>
          </tr>
          <tr>
            <th>著者</th>
            <td><input type="text" id="auther" /></td>
          </tr>
          <tr>
            <th>本文</th>
            <td><input type="text" id="contents" /></td>
          </tr>
        </tbody>
      </table>
      <input type="submit" id="queryButton" value="検索">
      <input type="button" id="resetButton" value="リセット">
      <input type="button" id="newButton" value="新規登録">
    </form>

  </body>
</html>

 「ArticleQueryForm.java」で指定した、フィールドが出力されています。QueryFormがデフォルトで持っている機能を呼び出すため、[検索][リセット][新規登録]のボタンも配置されます。

ArticleQueryResultForm.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <form id="queryResultForm">
      <div class="formHeader">検索結果</div>
      <input type="hidden" id="articleId" />
      <table class="responsive">
        <tbody>
        </tbody>
      </table>
      <div class="hScrollDiv">
        <table id="queryResult">
          <thead>
            <tr>
              <th>
                No.
              </th>
              <th>
                記事タイトル
              </th>
              <th>
                著者
              </th>
              <th>
                本文
              </th>
              <th>
                操作
              </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>
                <span id="queryResult[0].rowNo"></span>
                <input type="hidden" id="queryResult[0].articleId" />

    ・・・ 中略 ・・・


              </td>
              <td>
                <a id="queryResult[0].updateButton" href="javascript:void(0);"><span id="queryResult[0].title"></span></a>
              </td>
              <td>
                <span id="queryResult[0].auther"></span>
              </td>
              <td>
                <span id="queryResult[0].contents"></span>
              </td>
              <td>
                <input type="button" id="queryResult[0].viewButton" value="表示">
                <input type="button" id="queryResult[0].referButton" value="参照登録">
                <input type="button" id="queryResult[0].deleteButton" value="削除">
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </form>

  </body>
</html>

        

 「ArticleQueryResultForm.html」にはIDが「queryResult」というテーブルが配置されます。このテーブルの<tbody>には1行分の<tr>...</tr>タグが生成されています。この1行でテーブル中のレコードの表示方法を指定します。テーブル中に記事の著者名を表示するフィールドは以下のように展開されています。

テーブル中のフィールドの展開例
 <span id="queryResult[0].auther"></span>
ArticleEditForm.html
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <form id="editForm">
      <div class="formHeader"><span id="editFormTitle"></span></div>
      <input type="hidden" id="saveMode" />

    ・・・ 中略 ・・・

      <table class="responsive">
        <tbody>
          <tr>
            <th>記事タイトル</th>
            <td><input type="text" id="title" /></td>
          </tr>
          <tr>
            <th>著者</th>
            <td><input type="text" id="auther" /></td>
          </tr>
          <tr>
            <th>本文</th>
            <td><input type="text" id="contents" /></td>
          </tr>
        </tbody>
      </table>
      <div class="hScrollDiv">
        <table id="attachFileTable" class="editableTable">
          <thead>
            <tr>
              <th class="buttonColumn" nowrap>

              </th>
              <th class="buttonColumn" nowrap>

              </th>
              <th nowrap>
                No.
              </th>
              <th>
                ファイルコメント
              </th>
              <th>
                ファイルタイプ
              </th>
              <th>
                ファイル
              </th>
              <th>
                画像
              </th>
              <th>
                動画
              </th>
              <th>
                音声
              </th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td class="buttonColumn">
                <input type="button" id="attachFileTable[0].addButton" value="+"/>
              </td>
              <td class="buttonColumn">
                <input type="button" id="attachFileTable[0].deleteButton" value="-"/>
              </td>
              <td style="text-align: right;">
                <span id="attachFileTable[0].no"></span>
              </td>
              <td>
                <input type="text" id="attachFileTable[0].fileComment" />

    ・・・ 中略 ・・・

              </td>
              <td>
                <select id="attachFileTable[0].fileType"></select>
              </td>
              <td>
                <input type="file" id="attachFileTable[0].attachFile" />
              </td>
              <td>
                <input type="file" id="attachFileTable[0].attachImage" />
              </td>
              <td>
                <input type="file" id="attachFileTable[0].attachVideo" />
              </td>
              <td>
                <input type="file" id="attachFileTable[0].attachAudio" />
              </td>
            </tr>
          </tbody>
          <tfoot>
            <tr>
              <th class="buttonColumn">
                <input type="button" id="attachFileTable.addButton" value="+"/>
              </th>
              <th colspan="8">
              </th>
            </tr>
          </tfoot>
        </table>
      </div>
      <input type="button" id="confirmButton" value="確認"/>
      <input type="button" id="saveButton" value="登録"/>
      <input type="button" id="resetButton" value="リセット"/>
      <input type="button" id="deleteButton" value="削除"/>
      <input type="button" id="backButton" value="戻る"/>
    </form>

  </body>
</html>

 このフォームにはArticleTableの各フィールドと、AttachFileTableの各フィールドを表示するためのテーブル(ID:"attachFileTable")が出力されています。このテーブルに対応するテーブルクラスは、EditableHtmlTableであるため、行の追加や削除のためのボタンが配置されています。

次のページ
この段階での動作確認

この記事は参考になりましたか?

特集記事連載記事一覧

もっと読む

この記事の著者

高柳 正彦(タカヤナギ マサヒコ)

経験年数30年を超えた、システムエンジニアです。一応管理職のはずですが、未だにコードを書いています。この仕事を長々とやっていると、それなりにノウハウがたまってきます。そのノウハウをまとめたものができないかと思い、独自のフレームワークを作り始めました。そのフレームワークもそれなりに使えるようになってき...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/10018 2017/05/15 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー