2011-07-28 7 views
2

Play!フレームワークでは、ユーザーがゼロより大きい数値を入力する必要があるフィールドがあります。期待されると、ユーザが0以下に入った場合、エラーメッセージが表示されているように、これは動作しますアルファベット文字で入力したときの再生の数値フィールドの検証

public static void save(@Min(value = 1, message = "Age must be greater than zero") int age) { 
    ... 
} 

:私のコントローラでは、私はこのような何かを持っています。しかし、ユーザがabcのようなものを入力した場合、画面に表示されるメッセージにはIncorrect valueと表示されます。

この場合、UIでユーザーフレンドリーなエラーメッセージが表示されるようにするにはどうすればよいですか?

答えて

5

パラメータが数値かどうかを確認する正規表現を使用できます。

public static void save(@Match(value = "[0-9]+", message="Age must be numeric") 
         @Min(value = 1, message="Age must be greater than zero") int age) { 
    ... 
} 

誤った値のメッセージを無効にすることもできます。

メッセージファイルに入れてください。

validation.invalid=%s must be numeric 

ただし、これによってアプリケーション全体のメッセージが変更され、常に適切であるとは限りません。

別の可能な解決策は、検証をクリアしてから、あなたの保存・メソッドの中で必要なすべての検証を呼び出すためにある:

public static void save(int age) { 
    validation.clear(); 
    validation.min(age, 1); 
    ... 
} 

これは自動的に行われているすべての検証をクリアします。その後、自分で検証を呼び出すことができます。

+0

ありがとう。私はそれでもメッセージの代わりに間違った値を言うことを試みた。 Playは、「年齢」パラメータが「int」であり、検証注釈を実行しないという事実を識別しているようです。 MatchアノテーションとMinアノテーションを削除すると、それでも「不正な値」と表示されます。 – digiarnie

+0

私はいくつかの可能な解決策で自分の答えを更新しました。 – david

1

パラメータタイプをStringに変更するとどうなりますか?

public static void save(@Min(value = 1, message="Age must be greater than zero") String age) { 
    if(Validation.hasError()) { 
     Validation.keep(); 
     index(); 
    } 

    int intAge = Integer.parseInt(age); 
    ... 
} 
関連する問題