私は PlayFramework を使用して、Ajax 経由で機能する登録ユーザー フォームを作成しています (ページが更新されることはありません)。明らかにそれを検証する必要があります。クライアント側とサーバー側の検証を実装する 2 つの方法を検討しています。
- Ajax経由でフォームデータをサーバー側の検証に送信し、データが有効な場合はデータベースにユーザーを保存し、無効なデータの場合はフロントエンドにエラーメッセージを送信します。これはすべて、ページを更新せずに ajax を介して行われます。 Pro : このようにして、クライアント側の検証を実装しませんが、同じ効果が得られます。 コントロール: 無効なデータの種類ごとに特定のエラー メッセージを表示できません (必須、最小の長さ、メール形式など)。
- クライアント側の検証 (jQuery Validation プラグイン) でフォームを検証し、有効な場合はデータをサーバー側の検証に送信します。サーバー側からは、有効な場合はユーザーを登録し、そうでない場合は何も起こりません (?)。長所:特定のエラー メッセージを表示する非常に簡単な方法短所: 同じ検証ロジックを 2 回実装する必要がある
これらは私の考慮事項ですが、それらが正しいかどうか、または他のより良い方法があるかどうかはわかりません。これを行うための最良の方法は何だと思いますか?
質問:
最初の方法: サーバー検証から特定のエラー メッセージを送信し、PlayFramework を使用してフロントエンドに表示することは可能ですか (すべての検証ルールをゼロから作成する必要はありません)。
2 番目の方法: サーバーとサイドの両方の検証を実装するには、最初にクライアント検証でデータを検証してからサーバーに渡す必要がありますか? ブラウザでJavaScriptを無効にすると、サーバー側の検証で何かが表示される必要がありますか? (例: 注目に値する Mediafire はそれを行いません。正しいと仮定する必要があります)
編集:ここでは、JSON形式でajaxを介してフォームデータを受信するために使用しているコード:
コントローラ:
JsonNode json = request().body().asJson();
Form<User> userForm = User.form.bind(json);
if(userForm.hasErrors()) {
return badRequest("One or more inputs are invalid");
} else {
// register the user in the db
}
モデル (ユーザー):
@Required
public String email;
@Required @MinLength(8) @MaxLength(16)
public String password;
public static Form<User> form = Form.form(User.class);
そのままでは、無効な入力に対して一般的なメッセージが返されます。私ができないことは、(badRequest を使用して) 特定のエラー メッセージを返し、フォームの各入力の下に表示することです。