2016-05-30 5 views
1

У меня есть калитка Form внутри страницы, объявленные как это:Калитка: addOrReplace() внутри onSubmit формы()

protected void onBeforeRender() { 
    Form<Void> frm = new Form<Void>("frm") { 
      private static final long serialVersionUID = 1L; 

      @Override 
      protected void onSubmit() { 
       super.onSubmit(); 
       doSomething(); 
      } 
     }; 

    //other stuff... 
    addOrReplace(frm); 
} 

doSomething является способом, в самой странице. Внутри этого метода я:

private void doSomething(){ 
    //stuff... 
    addOrReplace(new Label("labelID", "Some text")); 
} 

Проблема заключается в том, что вызов addOrReplace не работает. Я не вижу текст, добавленный на страницу. Он появляется только в том случае, если я обновляюсь.

Как звонить на addOrReplace работы из-за обратного вызова onSubmit()?

ответ

2

Похоже, вы работаете с AjaxButtons. Вы должны обновить компонент или любые из его родителей, чтобы сделать изменения, видимые в браузере:

ajaxRequestTarget.add(frm); 

Запомнить вызвать #setOutputMarkupId (истинный) на компоненте, который требуется обновить с помощью Ajax:

frm.setOutputMarkupId(true); 
addOrReplace(frm); 

Чтобы получить AjaxRequestTarget, вы можете переопределить AjaxButton#onSubmit(AjaxRequestTarget, Form) и вызвать doSomething оттуда - передать AjaxRequestTarget любому методу, который должен что-то обновить.

В качестве альтернативы вы всегда можете вызвать #getRequestCycle(). Find (AjaxRequestTarget.class), чтобы получить текущий AjaxRequestTarget.

+0

Где именно следует поместить эти инструкции? Метод onSubmit() формы не имеет никаких параметров. Где я могу получить «ajaxTargetRequest»? –

+0

Я отредактировал свой ответ о том, как получить АРТ. – svenmeier

+0

Итак, вместо использования функции «onSubmit()« From »я должен использовать onSubmit() AjaxSubmitLink, правильно? (Я использую AjaxSubmitLink для создания кнопки отправки) –

Смежные вопросы