2017-01-04 13 views
0

AjaxFallbackButtonでフォーム入力にBeanValidationを使用してフォームを送信しています。エラーを表示するためのFeedbackPanel。無効な入力をした場合、フォームは送信されませんが、フィードバックパネルは表示されません。Wicket FeedbackPanelにAjaxFallBackButtonを使用すると空のメッセージが表示される

onError、form.getFeedbackMessages()は空の配列を返します。

ウィケットバージョン6.18.0。ここで

はコードです:

Form<Address> form = getForm(); 
    add(form); 

    FeedbackPanel feedbackPanel = new FeedbackPanel("feedbackMessage"); 
    feedbackPanel.setOutputMarkupId(true); 
    add(feedbackPanel);  


public Form<Address> getForm() { 

    CompoundPropertyModel<Address> model = new CompoundPropertyModel<Address>(address); 
    final Form<Address> form = new Form<Address>("addressForm", model); 

    form.add(new Label("fNameLabel", new ResourceModel("fNameLabel"))); 
    form.add(new Label("lNameLabel", new ResourceModel("lNameLabel"))); 
    form.add(new Label("workLabel", new ResourceModel("workLabel"))); 
    form.add(new Label("homeLabel", new ResourceModel("homeLabel"))); 

    form.add(new TextField<String>("firstName").add(new PropertyValidator<String>())); 
    form.add(new TextField<String>("lastName").add(new PropertyValidator<String>())); 
    form.add(new TextField<String>("homeLocation").add(new PropertyValidator<String>())); 
    form.add(new TextField<String>("workLocation").add(new PropertyValidator<String>())); 
    form.add(new AjaxFallbackButton("submit", form) { 

     /** 
     * 
     */ 
     private static final long serialVersionUID = 6672729206839722437L; 

     @Override 
     protected void onError(final AjaxRequestTarget target, final Form form) { 
      Page page = target.getPage(); 
      for (Component component : page.visitChildren()) { 
       String markupId = component.getMarkupId(); 
       if (markupId.contains("feedbackMessage")) { 
        if (form.hasFeedbackMessage()) { 

         System.out.println(form.getFeedbackMessages()); 
        } 
       } 
      } 

     } 

     @Override 
     protected void onSubmit(AjaxRequestTarget target, Form form) { 

      if (address.getFirstName() != null) { 
       AddressGenerator.getInstance().add(address); 
       modalWindow.closeCurrent(target); 
      } 
     } 
    }); 

    return form; 
} 

フォームがモーダルウィンドウです。

答えて

0

Component#getFeedbackMessages()は、このコンポーネントインスタンスのメッセージのみを返します。それは子供を訪問しない!あなたはif (form.hasError())を使用することができますが、あなたがAjaxFallbackButton#onError()にあるので、それは誤りがあることを意味

@Override 
    protected void onError(final AjaxRequestTarget target, final Form form) { 
     target.add(feedbackPanel); 
    } 

:で

更新しますonError()方法。

+1

フィードバックメッセージを収集する方法については、FeedbackPanelで使用されている「FeedbackMessagesModel」を参照してください。 – RobAu

+0

コードを追加しました。ありがとう。 – puvi

+0

私の答えを更新しました。 –

関連する問題