4

我目前正在评估 Wicket,并试图弄清楚事情是如何运作的。

我对表单提交和面板(或其他组件)有疑问。想象一个包含文本字段的自定义检票口面板,使用 ajax 进行输入验证。此面板被添加到表单中。小组如何对表单提交做出反应(假设是因为 javascript/ajax 不可用)?

我目前只知道一种解决方案:在 Form onSubmit() 方法中调用面板的方法。但这似乎不是一种“可重用”的方法,因为我必须将样板代码添加到包含面板的每个表单的 onSubmit() 中(并且每个使用面板的开发人员都必须知道这一点)。

所以我的问题来了:面板/组件有什么方法可以“检测”以某种方式提交的表单吗?或者除此之外还有其他解决方案吗?

谢谢你。

4

6 回答 6

6

使您的面板实现org.apache.wicket.markup.html.form.IFormModelUpdateListener,并且在updateModel()提交包含表单并通过验证时应该调用该方法。

Wicket In Action 博客中的一位 wicket 作者使用了一个很好的代码示例。

于 2010-07-13T11:53:50.940 回答
1

好吧,您可以简单地执行以下操作:

Panel{
Form{
  onSubmit(){
    Panel.this.onSubmit();
  }
}

protected void onSubmit(){}

}

...

这意味着任何扩展您的面板的面板只需要覆盖 onSubmit 和表单,无论它在 html 中是什么,都会调用该方法。这样您就可以扩展面板,并且只为每个表单覆盖一个方法。

于 2010-06-07T23:26:00.887 回答
0

“反应”是什么意思?我最近才开始使用 Wicket,但是 FWIK,表单提交会更新组件的模型,然后它会调用onSubmit(),您可以覆盖它以采取除此之外的特殊操作。参见 Wicket in Action,第 6 章。

之后,页面(及其组件)使用更新的模型重新渲染,所以基本上,它们真的对提交做出“反应”,只需要很少的代码行。

对于您提到的在表单中使用 Component 的情况,请查看CompoundPropertyModel.

于 2010-07-12T00:23:07.443 回答
0

实现 IFormSubmitListner 和 IFormModelUpdateListener 应在表单提交期间调用各自的方法。

但是,如果您想在表单提交后进行一些处理,恐怕您只能自己编写一些样板代码。

于 2013-07-10T04:05:12.787 回答
0

对于表单组件,框架会透明地为您处理。表单知道任何子表单组件,即使它们没有直接添加到父表单。

于 2010-06-02T16:35:03.620 回答
0

我会在该面板内有一个表格。这样,您可以重用该面板,而无需外部表单。由于表单不能在 HTML 中相互嵌套,Wicket 会透明地将内部表单交换为 ',但会确保每个内部表单都参与表单处理(验证,..)。

您可以在面板中覆盖表单的 OnSubmit() 函数。检票口会为你打电话。

于 2010-06-29T08:28:47.510 回答