【问题标题】:How to force Wicket "onchange" AJAX events to be triggered if fields fail validation conditions如果字段未通过验证条件,如何强制触发 Wicket“onchange”AJAX 事件
【发布时间】:2012-06-11 14:45:53
【问题描述】:

我想到的具体情况如下:将 AjaxFormComponentUpdatingBehavior("onchange") 添加到表单中的 TextField 中。行为验证特定条件下的文本(模型对象或表单组件模型,无关紧要),据此它可能会显示消息(或隐藏它,如果它已经显示)。

问题是,TextField 中还添加了验证器。一种可能(并且可能)的情况包括用户输入,首先输入一个值,该值会导致消息通过 AJAX 请求显示。然后,如果他/她输入了一个未通过验证的值消息应该会消失,但它不会。

显然,要么根本没有调用 AJAX 行为的 onUpdate() 方法,要么我尝试插入 检查未验证条目 失败>(我尝试测试空值和空字符串,但无济于事;我不知道当数据无效时,Wicket 的验证器对模型究竟做了什么)。

我想知道真正了解验证器(或实际上是 AJAX)的人是否对问题出在哪里有任何想法。

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

谢谢。

【问题讨论】:

    标签: ajax forms frameworks wicket


    【解决方案1】:

    使用AjaxFormComponentUpdatingBehavior 时,如果任何IValidators 验证失败,将调用onError() 而不是onUpdate()。 Wicket 将有效防止无效的用户输入到达你组件中的IModels,因此组件的 ModelObject 根本不会改变。无效的输入可能会通过getInput()/getConvertedInput() 保持可用(不确定它是否会在 AJAX 场景中,它肯定是在传统的表单提交中)。

    但是,请注意IFormValidators 在使用此机制时不会执行。如果您有任何内容,您可能有兴趣覆盖getUpdateModel(),以便AjaxFormComponentUpdatingBehavior 不会将可能无效的用户输入带入您的IModels,并在您确定用户输入有效时手动设置模型对象。

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

    【讨论】:

    • 谢谢你! onError() 似乎正是我想要的,并且也将简化我的逻辑。一定要喜欢检票口。
    • 确实 :) 只需要一点时间就可以了解它的强大功能。我去了将近一年而不知道getUpdateModel() :)
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多