2017-02-01 5 views
0

У меня есть калитка с флажком и текстовым полем. Мне нужно скрыть и показать textarea при изменении значения флажка.Apache Wicket: textarea потеряет содержимое после скрыть/показать

Это моя реализация:

private class EditCommentForm extends Form { 

    private TextArea applyToAllArea; 
    private boolean addToAll; 

    // some code here 

    public EditCommentForm(String id) { 
     super(id); 
     applyToAllArea = new TextArea<>("applyToAllArea", Model.of("")); 
     applyToAllArea.setVisible(addToAll); 
     applyToAllArea.setOutputMarkupId(true); 
     applyToAllArea.setOutputMarkupPlaceholderTag(true); 
     add(applyToAllArea); 

     CheckBox addToAllCheckbox = new AjaxCheckBox("addToAll", new PropertyModel<>(this, "addToAll")) { 
      @Override 
      protected void onUpdate(AjaxRequestTarget target) { 
       applyToAllArea.setVisible(addToAll); 
       target.addComponent(applyToAllArea); 
      } 
     }; 
     addToAllCheckbox.setVisible(documents.size() > 1); 
     add(addToAllCheckbox); 
     // some code here 
    } 

    private boolean isAddToAll() { 
     return addToAll; 
    } 

} 

Когда я ввожу некоторую информацию в текстовое поле, а затем нажмите на флажок в два раза (скрыть и показать текстовое поле) моя напечатал информация проиграете.

Итак, как я могу сохранить набранную информацию без формы submit?

Калитка версия 1.4.20

+1

'''applyToAllArea.setVisible (addToAll)' '' сделает так, что после вызова Ajax текстовая область больше не является частью dom. Таким образом, любой вход будет потерян. Вам потребуется отправить и сохранить значение в своем компоненте. Калитка 1.4? действительно? – bert

+0

@bert Спасибо за ваш комментарий –

ответ

3

Как @bert объяснил проблему в том, что содержание текстового поля не сохраняется, так или иначе, и после того, как перекрашивание Калитка использует текущую модель на стороне сервера, который пуст.

Простым решением является добавить new AjaxFormComponentUpdatingBehavior("onblur") в текстовое поле, чтобы оно сохраняло его содержимое, когда пользователь переместился на другой элемент страницы.

Я предлагаю вам обновить не менее 1.4.22. Он имеет несколько исправлений, связанных с безопасностью, по сравнению с 1.4.20.

+0

Большое вам спасибо! Вы решаете мою проблему. –

+0

Не могли бы вы обновить свой ответ? Поведение должно быть: новый AjaxFormComponentUpdatingBehavior («onblur») –

+0

О, правильно! Вы используете 1.4.x. Начиная с версии 6.0.0 это просто 'blur' –