8-1. 新規画面作成手順

ここでは、詳細設計書に従って新規画面を作成する手順について説明します。

詳細設計の内容確認

SEから指示された詳細設計書を読み、疑問点の洗い出しを行います。 この時点での疑問点は、開発着手前に必ず設計担当者に確認してください。

画面初期表示処理の実装

  • いきなりすべての機能を実装しようとしてはならない
  • まずは、URLアクセス -> 画面初期表示部の処理を作成する
    • コンソールアプリで最初にざっくりmainメソッドを作る作業に相当。

手順

1. ビュー雛形のコピー

最初にビューを作りましょう。 misc/skeleton フォルダに新規画面作成用の雛形が用意されています。この中から担当する画面向けの雛形を選び、詳細設計書に記載されている場所・ファイル名でコピーしてください。

雛形ファイル名 説明
unit.html 単票形式の画面用雛形
(作成予定) 一覧形式の画面用雛形
(作成予定) ヘッダ・ディテール形式の画面用雛形

2. 最小限のコントローラ作成

続いてコントローラを作成します。ただし、この時点で作るのは必要最小限です。 つまり、「特定のURLにアクセスすれば、先ほど用意したビューが表示される」処理のみを作ります。

まず、詳細設計書の指示に従い、コントローラクラスを作成します。

実装例
package com.akikura.web.order;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/orders")
public class OrderEntryController {
    @RequestMapping(path="/entry", method=RequestMethod.GET)
    public String entry() {
        return "order/order-entry";
    }
}
規約
  • 画面用のコントローラクラスには、@Controller アノテーションを付与する
  • 画面用のコントローラクラスには、@RequestMapping アノテーションを付与する
    • pathには、サブシステムの親パスを指定する(例:荷主登録画面 /owners/entry -> 荷主サブシステムを表す /owners)
  • @RequestMapping メソッドは以下の規約を守ること
    • 戻り値はString(表示画面を表すパス)
    • 引数は以下を指定可能(他にも指定可能だが、原則以下のみを使用する。)
      • 画面入力/表示項目用フォームオブジェクト
      • Validationありのリクエストの場合、BindingResult
      • リダイレクトありで、リダイレクト先に情報転送が必要な場合、RedirectAttributes

この時点で、akikuraを起動し、@RequestMappingメソッドに指定したURLにアクセスして、コピーしたビュー雛形の画面が表示されることを確認します。

3. デザインイメージの適用

src/main/resources/static/sample の中にデザイン案が置いてあります。 例えば、オーダー登録画面なら、order-entry01.html です。 設計担当者に適用するデザイン案を確認して、1.で配置したビューに内容をコピーしてください。

規約

  • コピーするのは、articleタグの内容のみ。他の箇所はビュー用共通モジュール(templates.common)で定義済みのため。コンテンツ[START]/[END]のコメントの間を書き換える。

    <!--/* コンテンツ [START] */-->
    <article class="container">
    <form class="form-horizontal" method="POST" id="submitForm"> 
      <h2 class="PageTitle">(ページタイトル)</h2>
      <fieldset>
      </fieldset>
    </form>
    </article>
    <!--/* コンテンツ [END] */-->
    

    4. 画面実装

    以下の画面実装を行う。画面のコンポーネント1つにつき、以下の作業を繰り返し、画面動作確認を行うこと。

  • Thymeleafの属性を追加する

    • ak:tooltipは、akikuraプロジェクト独自の属性。Validationありの入力項目の場合は、必ず設定すること。
  • 画面の入力項目に対応するFormクラスを定義する。
  • Formクラスにフィールド・getter・setterを定義する
  • ラベル等のメッセージ文言はsrc/main/resources/i18n/messages_ja.propertiesに定義すること
    • ファイルが文字化けする場合はエンコーディングがUTF-8になっているか確認。なっていなければ変更する
    • 多言語対応可能なよう、messages.propertiesも用意しているが、実装するのはmessages_ja.propertiesのみで構わない
  • ブラウザで表示確認し、エラーが出ないことを確認する。

5. ボタンアクションの実装

オペレーションボタンの設定は、Controllerクラスに以下のような@ModelAttributeメソッドを実装することで定義可能。

// 実装例:「戻る」「編集」「削除」ボタンを表示する
@ModelAttribute(Consts.MODEL_OPERATIONS_NAME)
public List<Operation> operations() {
    return Operation.operations(Operation.BACK, Operation.EDIT, Operation.DELETE);
}

これは、Spring MVC標準の機能ではなく、akikuraプロジェクト独自の仕様である点に注意。

ボタン押下時の処理(クライアントサイド)

JavaScriptで実装する。

  • src/main/resources/static/js に画面ごとのjsファイルを作成する。
  • htmlファイルにscript要素を追加し、作成したjsファイルを読み込む。
ボタン押下時の処理(サーバサイド)
  • 対応する@RequestMappingメソッドを実装する。

6. 画面遷移処理

この時点で残っているのは、以下の実装だろう

  • バリデーション
  • DBアクセス処理
  • 画面遷移

まずは、バリデーション・DBアクセスは飛ばして、 正常系の画面遷移を作成することをお勧めする。大きな画面フローを作り上げてから中身の作り込みをする方が、開発スピードが上がるからだ(経験則)。

例えば、オーダー登録画面-(保存ボタン押下)-(DB登録)> オーダー詳細画面という 機能を作る場合は、DB登録以外の処理をこの時点で実装してしまおう。

7. バリデーション

  • Formクラスに設計書に従って適切なAnnotationをつける
  • @RequestMapping メソッドの Formオブジェクト引数に@Validアノテーションをつける

8. ビジネスロジック(DBアクセス)

- com.akikura.service(及びimpl)に、流用可能なサービスクラスがあるか探す。なければ作る。 - 作成の際は、必ず、インターフェイスと対応する実装クラスを作成する。実装クラスのみは不許可。これは、akikuraプロジェクトとしての規約

  • com.akikura.repository に流用可能なrepositoryクラスがあるか探す。なければ作る。 -

results matching ""

    No results matching ""