博多南ウェブサービスのblog

博多南ウェブサービスのサービス紹介

【Play Framework 2.8.x のフォーム入力サンプル】都道府県メニューにMinimum value: 1 Maximum value: 47 Numericを表示しない

Play Framework を始めたばかりの方向けに、サンプルを進めるうえで困ったところを共有する目的で書いています。

Play Framework 2.8.x のScala 用フォーム入力サンプルに、 都道府県を選択するメニューを追加したときのメモです。

今回は、都道府県メニューに表示された、Minimum value: 1 Maximum value: 47 Numericを表示しないようにしました。

f:id:hakataminamiWS:20210209114224p:plain
都道府県メニューにMinimum value: 1 Maximum value: 47 Numericを表示しない

以下、目次

前提

変更内容

Form の入力項目都道府県を(マッピングを)Int からString 変更しました。

表示された内容から、以下の方法がありそうで

  1. 都道府県のkey (が制約Int (min = 0, max = 47) になっている)を無くす
  2. 表示しているhelper に非表示の機能があればつかう
  3. 生成されたhtml から表示部分を削除する

都道府県を Int -> String でマッピングする必要は今のところないなあ、と考えて
以下のとおりに変更。

/app/views/Prefecture.scala

package views

import scala.collection.immutable.ListMap

object Prefecture {
  val allPrefecture: ListMap[String, String] = ListMap(
    "HOKKAIDO" -> "北海道",
    "AOMORI" -> "青森",
    "IWATE" -> "岩手",
    "MIYAGI" -> "宮城",
    "AKITA" -> "秋田",
    "YAMAGATA" -> "山形",
    "FUKUSHIMA" -> "福島",
    "IBARAKI" -> "茨城",
    "TOCHIGI" -> "栃木",
    "GUNMA" -> "群馬",
    "SAITAMA" -> "埼玉",
    "CHIBA" -> "千葉",
    "TOKYO" -> "東京",
    "KANAGAWA" -> "神奈川",
    "NIIGATA" -> "新潟",
    "TOYAMA" -> "富山",
    "ISHIKAWA" -> "石川",
    "FUKUI" -> "福井",
    "YAMANASHI" -> "山梨",
    "NAGANO" -> "長野",
    "GIFU" -> "岐阜",
    "SHIZUOKA" -> "静岡",
    "AICHI" -> "愛知",
    "MIE" -> "三重",
    "SHIGA" -> "滋賀",
    "KYOTO" -> "京都",
    "OSAKA" -> "大阪",
    "HYOGO" -> "兵庫",
    "NARA" -> "奈良",
    "WAKAYAMA" -> "和歌山",
    "TOTTORI" -> "鳥取",
    "SHIMANE" -> "島根",
    "OKAYAMA" -> "岡山",
    "HIROSHIMA" -> "広島",
    "YAMAGUCHI" -> "山口",
    "TOKUSHIMA" -> "徳島",
    "KAGAWA" -> "香川",
    "EHIME" -> "愛媛",
    "KOCHI" -> "高知",
    "FUKUOKA" -> "福岡",
    "SAGA" -> "佐賀",
    "NAGASAKI" -> "長崎",
    "KUMAMOTO" -> "熊本",
    "OITA" -> "大分",
    "MIYAZAKI" -> "宮崎",
    "KAGOSHIMA" -> "鹿児島",
    "OKINAWA" -> "沖縄"
  )
}

結果

表示が消えました。

変更してみて

そもそも、Minimum value 等のメッセージはなぜ表示されるのかというと、
PalyFramework 2.8.x のドキュメント

All input helpers take an implicit FieldConstructor that handles this part. The default one (used if there are no other field constructors available in the scope), generates HTML like:

だそう。

これを制御するオプションは

This default field constructor supports additional options you can pass in the input helper arguments:
'_showConstraints -> false

だそうで、
Github のコメントのとおりにちょっと変更して(ドキュメント記載方法では上手くいかないので)

- @helper.inputText(form("price"))
+ @helper.inputText(form("price"), Symbol("_showConstraints") -> false)

こちらでも表示を消せました。

Heroku 公開はこちら

Githubこちら

以上でした。