私の理解が正しければ、次の機能のいずれかを実装しようとしているように思えます。
- フォーム送信前に長すぎる入力テキスト フィールドを強調表示する
- 入力フィールド内のテキストが長すぎないようにクリッピングする
Play の HTML テンプレート エンジンは、この種のクライアント側のインスタント フォーム検証をネイティブには提供していません。この機能は JavaScript を介して実装する必要があり、JavaScript の生成は Play にとって実際には問題ではありません。
フォームを段階的に強化し、クライアント側の検証を提供する場合は、JavaScript を自分で作成する必要があります。もちろん、このタスクを支援するために使用できるライブラリがあります。たとえば、すでに jQuery を使用している場合は、その検証プラグインを使用できます。
質問で述べたように、クライアント側の JavaScript コードとサーバー側の Java コードで重複するのではなく、最大長の制限を 1 か所だけで宣言する方がよいでしょう。提案として、制限を Java コードで宣言したままにし、この制限を含む JSON 応答を返す新しいアクションをコントローラー層に導入することができます。このアクションは、フォーム ページをロードするときに AJAX 経由で呼び出すことができます。
編集
属性について知りませんでした。Saadmaxlength
に感謝します。テンプレートへの入力パラメーターとして最大長制限をフィードする場合、次のように要素の属性を設定できます。input
maxlength
@(accountForm: Form[Account], maxLength: Int)
...
@form(action = routes.Application.addAccount()) {
...
@inputText(
field = accountForm("id"),
args = '_label -> "Enter your id:", 'maxlength -> maxLength
)
...
}
...
HTML テンプレートに渡すより洗練された方法があるかもしれません(たとえば、HTTP コンテキスト マップを使用するか、フォーム オブジェクトmaxLength
のパブリック フィールドとして使用します)。Account
上記のコード スニペットは、テンプレートでアクセスできるようになったら、入力テキスト フィールドを正しく生成する方法を示しています。