我想到的具体情况如下:AjaxFormComponentUpdatingBehavior(“onchange”)被添加到表单中的TextField.该行为验证某些条件的文本(模型对象或表单组件模型,无关紧要),根据它可以显示消息(或隐藏它,如果已经显示).
问题是,还有一些验证器添加到TextField.其中一个可能的(也可能是)场景包括用户输入,首先是一个导致消息由AJAX请求显示的值.然后,如果他/她键入了未通过验证的值,则消息应该消失,但事实并非消失.
显然,根本没有调用AJAX行为的onUpdate()方法,或者我试图插入对未经验证的条目的检查失败(我试图测试空值和空字符串,否则可用;我不知道Wicket的验证器在数据无效时对模型做了什么.
我想知道是否有人真正了解验证器(或实际上是AJAX)对问题的位置有任何想法.
我可以发布编辑和发布代码,如果有人告诉我这不是绑定验证器和AJAX的一般问题,但很可能是一个编程错误.我仍然相信前者,因此我将避免发布代码部分,以便继续讨论API /理论框架.
谢谢.
解决方法
使用AjaxFormComponentUpdatingBehavior时,如果任何IValidator验证失败,将调用
onError()
而不是
onUpdate()
.Wicket将有效防止无效的用户输入到达组件中的IModel,因此组件的ModelObject根本不会更改.无效输入可能会通过
getInput()
/
getConvertedInput()
保持可用(不确定它是否会在AJAX场景中,它确定是传统的表单提交).
但是,请考虑使用此机制时不执行IFormValidators.如果您有任何内容,您可能有兴趣覆盖getUpdateModel()
,以便AjaxFormComponentUpdatingBehavior不会将可能无效的用户输入带入您的IModel,并在您确定用户输入有效时手动设置modelobject.
关于您的具体情况,您可以在onError()中执行所有必需的逻辑(或依赖于将从其他地方获取数据的模型),并且只需将需要刷新的组件添加到AjaxRequestTarget.这可能是您的方案中缺少的内容.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。