2012-02-28 9 views
3

Webアプリケーションでは、ユーザーが入力した番号を取得してコントローラーで処理する必要があります。長さが14桁以上であることを確認する必要があります。 12桁の数字を入力してから 'space'を2回押すと、確認が行われます。 プレイフレームワークのコントローラーに送信する前にトリミングパラメーターを設定する

は、IのようなI expected..Looksは、私はそれがコントローラメソッドに到達する前に入力をトリミングする必要しかし、これは動作しないこの

public static void processNumber(@Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
if(validation.hasErrors()) { 
    params.flash(); 
    validation.keep(); 
    ... 
    } 

}

同じように符号化されました。

誰かがこれを行う方法を提案できますか?

p.s: より複雑な例は

'11 2233444444' のように入力されます 『1122334ad44444』など、入力が数字であり、任意のアルファベット文字が含まれていないことを確認するために任意の検証がありますか?

答えて

1

データがバインドされている方法を変更するのではなく、そこにあるものを検証するために、カスタムバインダーがあなたの探しているものを提供するとは思わない。したがって、あなたが探しているのはカスタムバリデーターだと思います。 http://www.playframework.org/documentation/1.2/validation#custom

しかし、効果的に、あなただけ使用するバリデータを指定し@CheckWithアノテーションを使用することができ、その後、あなたのバリデータでは、あなたのトリミング、文字列は、スペースのないことを確認することができます -

は、詳細についてはこちらを参照してください。アルファベットなどはありません

トリガされたデータを無視したい場合、バリデータは入力を変更しないので、これはデータ内にとどまり続けますので、変更することができますそれが検証された後、または他の答えで議論されているようにカスタムバインダーを使ってそれを行うことができます。

+0

ありがとう、私はこれを行うカスタムバリデータを作成しました –

1

それはあなたが、私はそれが助けを願っていlink

を何をしたいのかにあなたを助けることができるかどうかを確認してください。

+0

これが正解です。 – ripper234

1

あなたは、少なくとも14桁の数値を持つようにしたい場合は、1つのオプションは、次のようになります。この方法では

public static void processNumber(@Required @Min(10000000000000) Long inputNumber) 

問題:

  • 最大許容数は
  • 9223372036854775807リットルでしょう"0"で始まる数字は許可されません。

いくつかのより多くのオプション:

public static void processNumber(
    @Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
validation.isTrue("inputNumber", !inputNumber.contains(" ")); 
if(validation.hasErrors()) { 

あるいはさらに良い:

public static void processNumber(
    @Required @MinSize(value=14,message="min size is 14") String inputNumber){ 
for(int i=0;i<inputNumber.length();i++) { 
    validation.isTrue("inputNumber", Character.isDigit(inputNumber.charAt(i))) 
if(validation.hasErrors()) { 
関連する問題