【问题标题】:Wicket: On RadioChoice component, invoke form submit, what am I missingWicket:在 RadioChoice 组件上,调用表单提交,我错过了什么
【发布时间】:2010-06-25 16:36:37
【问题描述】:

wicket 中有一些组件似乎与表单相关联,但我无法让它们实际提交表单。

例如,我可以创建一个“提交链接”或按钮,然后这些组件提交:

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 相关联?

【问题讨论】:

    标签: java forms submit wicket


    【解决方案1】:

    您的问题不在于表单与 RadioChoice 的连接,因为表单组件的大多数表单处理内容会在组件层次结构中搜索包含表单,并且即使它不是直接父级也会找到它。

    但 RadioChoice 不会自然地提交表单,并且可能需要在客户端完成某些操作才能进行实际的表单提交。

    使用 wantOnSelectionChangedNotifications 只是为 Ajax 请求启用 javascript,通知服务器无线电选择的更改。此 Ajax 不包括表单提交。

    您也许可以将 AjaxFormSubmitBehavior 的子类附加到 RadioChoice 并进行实际的表单提交,但我没有尝试过,也不知道它是否会起作用。

    您也可以尝试附加 AjaxFormComponentUpdatingBehavior,然后仅刷新页面中受影响的部分,如 this example code (对于 DropDownChoice,但类似的策略适用于 RadioChoice)。如果问题是您丢失了其他输入元素的更改(由于缺少提交而在服务器端未知),这可能会导致您解决根本问题。

    【讨论】:

    • 我已经修复了示例链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 2019-12-06
    • 2020-12-04
    • 1970-01-01
    相关资源
    最近更新 更多