如果字段失败验证条件,如何强制触发Wicket"onchange"AJAX事件

use*_*Num 4 forms ajax frameworks wicket

我想到的具体情况如下:AjaxFormComponentUpdatingBehavior("onchange")被添加到表单中的TextField.该行为验证某些条件的文本(模型对象或表单组件模型,无关紧要),根据它可以显示消息(或隐藏它,如果已经显示).

问题是,还有一些验证器添加到TextField.其中一个可能的(也可能是)场景包括用户输入,首先是一个导致消息由AJAX请求显示的值.然后,如果他/她键入了未通过验证,则消息应该消失,但事实并非消失.

显然,根本没有调用AJAX行为onUpdate()方法,或者我试图插入对未经验证的条目检查失败(我试图测试空值和空字符串,否则可用;我不知道Wicket的验证器在数据无效时对模型做了什么.

我想知道是否有人真正了解验证器(或实际上是AJAX)对问题的位置有任何想法.

我可以发布编辑和发布代码,如果有人告诉我这不是绑定验证器和AJAX的一般问题,但很可能是编程错误.我仍然相信前者,因此我将避免发布代码部分,以便继续讨论API /理论框架.

谢谢.

Xav*_*ica 8

当使用a时AjaxFormComponentUpdatingBehavior,如果其中任何一个未IValidator通过验证,onError()将被调用而不是onUpdate().Wicket将有效地防止无效的用户输入到达IModel组件中的s,因此组件的ModelObject根本不会被更改.无效输入可能会通过getInput()/ 保持可用getConvertedInput()(不确定它是否会在AJAX场景中,它肯定是在传统的表单提交中).

但是,请注意IFormValidator在使用此机制时不执行s.如果您有任何内容,您可能会对覆盖感兴趣,getUpdateModel()这样AjaxFormComponentUpdatingBehavior就不会将可能无效的用户输入带入您的IModels,并在您确定用户输入有效时手动设置modelobjects.

关于您的具体情况,您可以执行所有必需的逻辑onError()(或依赖于Model将从其他地方获取数据的s),并且只需添加需要刷新的组件AjaxRequestTarget.这可能是您的方案中缺少的内容.

  • 谢啦!onError()似乎正是我所寻找的,也将简化我的逻辑.一定要爱检票口. (2认同)