【问题标题】:Wicket - Update model with ajax without validationWicket - 使用 ajax 更新模型而不进行验证
【发布时间】:2016-06-01 09:09:53
【问题描述】:

我有一个带有多个布局复选框的表单:“[*] A 类型的项目(计数:2)”。 每个这样的复选框都附加了一个链接(上述布局中的“计数:2”),显示附加到相应复选框的列表中的项目数。该链接会打开另一个表单,用于将项目添加到列表中。 如果用户选中此类复选框,则链接将启用并且她可以添加项目。但是如果复选框被选中并且没有添加任何项目,则提交表单时必须显示错误。

我尝试使用 AjaxCheckbox 来启用/禁用链接,它工作正常,直到我将验证器添加到复选框(以检查上述条件)。 问题是:当从复选框发送 ajax 请求时,验证器被调用并且验证失败,因为列表中还没有项目。

Wicket 中是否有办法在组件上使用验证器,并且仅在提交表单时使用它,而不是在发送 ajax 请求时使用它?换句话说,只是更新模型的 ajax。

我知道我可以使用在 AjaxFormComponentUpdatingBehavior 循环中未调用的 IFormValidator,但是我可能不得不创建尽可能多的 IFormValidator,因为我想避免表单上有复选框。

PS:抱歉没有提供图片,我的开发机器在一个隔离的安全局域网中,我不能从那里复制文件。

【问题讨论】:

  • 您可以发布 UI 的代码或快照吗?它将帮助回答者更好地了解您的问题。
  • 抱歉,由于安全原因,我不能这样做

标签: ajax validation wicket


【解决方案1】:

您可以在表单中添加一个 IFormValidator,它只会在整个表单提交时调用:

public class ItemsValidator extends AbstractFormValidator
{

  @Override
  public FormComponent<?>[] getDependentFormComponents()
  {
    return new FormComponent[]{checkbox};
  }

  @Override
  public void validate(Form<?> form)
  {
    if (checkbox.getConvertedInput() && items.isEmpty())
    {
      error(checkbox);
    }
  }
}

【讨论】:

  • 谢谢,应该可以,但我更愿意将这些检查保留在相关组件中,而不是将它们传播到表单之外。我找到了your answer,您建议在请求周期中设置一个标志以供验证器使用。我认为该解决方案应该可以。
  • 将复选框包装在 FormComponentPanel 中是另一种选择 - 它可以在表单提交期间验证您的复选框/项目组合。
  • 抱歉,不明白 FormComponentPanel 如何帮助解决我的 ajax 问题?你能详细说明一下吗?
  • FormComponentPanel 参与表单处理,能够像 FormValidator 那样拒绝表单提交。类似于 IFormValidator,但不需要将其添加到表单中 - 因此允许“将这些检查保留在相关组件内,而不是将它们传播到表单之外”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多