[Wicket-ja-user 60] Re: AjaxFormComponentUpdatingBehavior とPatternValidatorを同時に使用

Zurück zum Archiv-Index

yuichi tanaka u1tnk****@gmail*****
2008年 4月 1日 (火) 14:04:42 JST


u1です。

申し訳ありません。
記憶で書いていたので見落としていた部分がありました。

>  実際は999999形式で入力しonblur時にチェックが行われエラーで変換が行われずに
>  今回は更にエラーが表示されるFeedbackPanelがadd、setOutputMarkupIdされておらず
>  エラーが表示できていないということでしょうか?
基本的には上記認識で良いのですが、そもそもValidationエラー時はonUpdateに来ないのですから、onUpdateのtargetにaddしても意味ありませんね。ここを見逃していました。

追加で、AjaxFormComponentUpdatingBehaviorのonErrorをオーバーライドして、そのtargetにFeedbackPanelをaddしてください。Validationエラー時はここに来ます。
			@Override
			protected void onError(AjaxRequestTarget target,
					RuntimeException e) {
				target.addComponent(feedback);
			}
また、onUpdateのtargetにもaddしておかないと、いったん表示されたエラーが正常時にも消えないのでご注意下さい。

今回は不安になって、1.3.2で動作確認したので問題無いと思います。

08/04/01 に maeda<aaake****@gmail*****> さんは書きました:
> おはようございます、maedaです。
>
>  u1さま返信ありがとうございました。
>
>  実装したかったことは
>  1.onblur時に999999形式で入力した数値を999/999と分数表記に変換する。(AjaxFormComponentUpdatingBehavior)
>  2.ボタン押下時に999/999形式かチェックを行う。(PatternValidator)
>
>  実際は999999形式で入力しonblur時にチェックが行われエラーで変換が行われずに
>  今回は更にエラーが表示されるFeedbackPanelがadd、setOutputMarkupIdされておらず
>  エラーが表示できていないということでしょうか?
>
>
>
>
>
>  "yuichi tanaka" <u1tnk****@gmail*****> wrote:
>
>  > u1です。
>  >
>  > 私もハマったことありますが、正常にValidationにひっかかってるんだけど、AjaxRequestTarget
>  > にFeedBackPanelをaddしていない為、エラーメッセージを表示できていないだけだと思います。
>  >
>  > これもよくやりましたが、setOutputMarkupId(true)を忘れずに!
>  >
>  >
>  >
>  >
>  > 08/03/31 に maeda<aaake****@gmail*****> さんは書きました:
>  > > maedaです。
>  > >
>  > >  度々質問してしまった申し訳ないのですが・・・。
>  > >
>  > >  TextFieldに対して以下のことを同時に行い対のですが
>  > >
>  > >  ・AjaxFormComponentUpdatingBehaviorを使用しonblur時に入力された文字の変換
>  > >  ・PatternValidatorを使用しての入力チェック
>  > >
>  > >  両方ともTextFieldにaddするとAjaxFormComponentUpdatingBehaviorのonUpdateメソッドが
>  > >  PatternValidatorで設定したパターンの時の値か空の時しか呼出されなくなってしまいます。
>  > >
>  > >  以下ソースです。
>  > >  public Test28() {
>  > >
>  > >         test28form = new Test28form();
>  > >
>  > >         Form form = new Form("form",new CompoundPropertyModel(test28form));
>  > >         this.add(form);
>  > >
>  > >         form.add(new FeedbackPanel("feedback"));
>  > >
>  > >         final TextField textField = new TextField("text03");
>  > >         textField.setOutputMarkupId(true);
>  > >
>  > >         form.add(textField);
>  > >
>  > >         AjaxFormComponentUpdatingBehavior ajaxFormComponentUpdatingBehavior = new AjaxFormComponentUpdatingBehavior("onblur"){
>  > >                 @Override
>  > >                 protected void onUpdate(AjaxRequestTarget arg0) {
>  > >                         String buf = textField.getValue();
>  > >
>  > >                         //変換処理、省略・・・。
>  > >
>  > >                         setModelObject(buf);
>  > >                         arg0.addComponent(textField);
>  > >                 }
>  > >         };
>  > >
>  > >         //AjaxFormComponentUpdatingBehaviorをadd
>  > >         textField.add(ajaxFormComponentUpdatingBehavior);
>  > >         //PatternValidatorをadd
>  > >         textField.add(new PatternValidator("[0-9]{3}/{1}[0-9]{3}"));
>  > >  }
>  > >
>  > >  今回のソースですと
>  > >  PatternValidatorで3桁数値/3桁数値以外をエラーにするとしているので
>  > >  AjaxFormComponentUpdatingBehaviorのonUpdateメソッドが3桁数値/3桁数値を入力した時と
>  > >  空の時にロストフォーカス時しか呼出されません。
>  > >  単純にaddしただけだとダメなのでしょうか?
>  > >
>  > >  WICKET AJAX DEBUGのログでは呼出される時もダメな時も同じログが流れていました。
>  > >
>  > >  _______________________________________________
>  > >  Wicket-ja-user mailing list
>  > >  Wicke****@lists*****
>  > >  http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
>  > >
>  >
>  > _______________________________________________
>  > Wicket-ja-user mailing list
>  > Wicke****@lists*****
>  > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
>
>  _______________________________________________
>  Wicket-ja-user mailing list
>  Wicke****@lists*****
>  http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user
>




Wicket-ja-user メーリングリストの案内
Zurück zum Archiv-Index