Wicket: В компоненте RadioChoice вызовите форму отправки, что мне не хватает - PullRequest
2 голосов
/ 25 июня 2010

В калитке есть некоторые компоненты, которые, похоже, связаны с формой, но я не могу заставить их фактически отправить форму.

Например, я могу создать «ссылку для отправки» или кнопку, и эти компоненты отправят:

return new SubmitLink(id, form) {   
   @Override
   public void onSubmit() {
    this.setResponsePage(pageClass);
   }
  };

Это работает выше.

Я хочу иметь возможность выполнить отправку по выбору радио, при изменении. Э.Г.

new OnChangeHandler() {     

     @Override
     public void onChange(final Object sel) {      
      // On submission, submit back to form
      setResponsePage(Page.class);
     } 

// MY CONTAINER IS NOT A FORM BUT A CHILD OF A FORM (E.g. FORM -> PANEL -> RADIOCHOICE

public RadioChoice addRadioGroup(final WebMarkupContainer container, final Object modelObject, 
   final String groupName, final String propFieldName, final String [] optionsArr, final OnChangeHandler handler) {

  final RadioChoice radioGroupYesNo = new RadioChoice(groupName, new PropertyModel(modelObject, propFieldName), Arrays.asList(optionsArr)) {

         @Override
   public boolean wantOnSelectionChangedNotifications() {   
    return (handler != null); /* When the handler is not null, enable on change */
   }
   @Override
   public void onSelectionChanged(Object newSel) {
    if (handler != null) {     
     handler.onChange(newSel);
    } else {
     super.onSelectionChanged(newSel);
    }
   }   
  };    
  container.add(radioGroupYesNo);
  return radioGroupYesNo;
 }

С кодом, показанным выше, страница обновляется, но я хочу отправить форму и обновить страницу.

Не понимаю, где можно связать форму с RadioChoice?

1 Ответ

2 голосов
/ 27 июня 2010

Ваша проблема не в подключении формы к RadioChoice, так как большинство средств обработки форм для компонентов формы ищет в иерархии компонентов содержащую форму и находит ее, даже если она не является непосредственным родителем.

Но RadioChoice естественно не отправляет форму, и, вероятно, что-то должно быть сделано на стороне клиента для фактической отправки формы.

Использование wantOnSelectionChangedNotifications просто включает JavaScript для запроса Ajax, информирующего сервер оизменить в выборе радио.Этот Ajax не включает отправку формы.

Возможно, вы сможете прикрепить подкласс AjaxFormSubmitBehavior к вашему RadioChoice и получить фактическую отправку формы, но я не пробовал и не знаю, еслиэто будет работать вообще.

В качестве альтернативы вы можете попробовать присоединить AjaxFormComponentUpdatingBehavior и затем обновить только те части страницы, на которые влияют, как в этом примере кода (для DropDownChoice, но подобная тактика может работать дляRadioChoice).Если проблема в том, что вы теряете изменения для других элементов ввода (которые не известны на стороне сервера из-за отсутствия отправки), это может привести к решению вашей корневой проблемы.

...