Hiroto YAMAKAWA
yamak****@photo*****
2013年 11月 23日 (土) 14:04:40 JST
ykichi0908さん、こんにちは。 私が意図をくみ取れているか不安なのですが、 単純に、金額、店舗の順でDropDownChoiceを選択した ときにも同じValidatorを動作させたいということであれば、 この様に書き換えれば動作すると思います。 https://gist.github.com/gishi-yama/7610997 書き換えた部分は ・amountFeedBackをFeedbackPanelへ ・amountFeedBackにsetOutputMarkupId(true); ・storeにもAmountOverValidatorをadd ・storeのAjaxFormComponentUpdatingBehaviorにも onErrorメソッドを追加 です。 2013年11月22日 23:31 <ykich****@yahoo*****>: > はじめて、メールをさせて貰います、 > > 関連確認は、formvalidatorで行えますが入力内容が沢山あるので入力時点でエラー表示がしたいです(wicket6を使用しています) > > 店舗、金額で入力を行うとエラー表示されますが、金額、店舗で行うとエラー表示されないので困って言います > (金額の独自Validatorを金額、店舗の順で選択してもチェックさせたい) > > private final Form<Void> myForm = new Form<>("InputForm"); > > private final DropDownChoice<String> store = new > DropDownChoice<String>("store", new Model<String>(),Arrays.asList("店舗A", > "店舗B")); > > private final DropDownChoice<String> amount = new > DropDownChoice<String>("amount", new Model<String>(),Arrays.asList("100", > "200", "300", "400", "500")); > > ComponentFeedbackPanel amountFeedBack; > > > > > this.add(myForm); > myForm.add(store); > // 店舗別金額Overバリデータ > amount.add(new AmountOverValidator(amount, store)); > // 金額フィードバックパネル > amountFeedBack = new ComponentFeedbackPanel("amountFeedBack", amount); > myForm.add(amount); > myForm.add(amountFeedBack); > > > > > store.add(new AjaxFormComponentUpdatingBehavior("onchange") { > @Override > protected void onUpdate(AjaxRequestTarget target) { > // > } > }); > > amount.add(new AjaxFormComponentUpdatingBehavior("onchange") { > @Override > protected void onUpdate(AjaxRequestTarget target) { > // > target.add(amountFeedBack); > } > @Override > protected void onError(AjaxRequestTarget target, RuntimeException e) { > super.onError(target, e); > target.add(amountFeedBack); > } > }); > > > public class AmountOverValidator extends AbstractValidator<String> { > private DropDownChoice<String> store; > private DropDownChoice<String> amount; > > public AmountOverValidator( DropDownChoice<String> > amount,DropDownChoice<String> store){ > this.store = store; > this.amount = amount; > } > > @Override > protected void onValidate(IValidatable<String> validatable) { > // 入力値を取得 > String strStore = this.store.getConvertedInput(); > String strAmount = this.amount.getConvertedInput(); > > if (strStore == null) { strStore = store.getModelObject(); } > if (strAmount == null) { strAmount = amount.getModelObject(); } > > if ((StringUtils.isEmpty(strStore)) || > (StringUtils.isEmpty(strAmount))) { > } else { > //店舗別の金額確認処理 > //エラー時のとき > error(validatable, "AmountOverValidator"); > } > } > } 山川広人 yamak****@photo***** 千歳科学技術大学 総合光科学部 助教