Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Wicket-AjaxFormComponentUpdateBehavior和backspace_Java_Ajax_Wicket_Onkeyup_Backspace - Fatal编程技术网

Java Wicket-AjaxFormComponentUpdateBehavior和backspace

Java Wicket-AjaxFormComponentUpdateBehavior和backspace,java,ajax,wicket,onkeyup,backspace,Java,Ajax,Wicket,Onkeyup,Backspace,我有一个TextField,其中我添加了一个ajaxFormComponentUpdateingBehavior,以在用户写入一些字符串时获取当前值 filterByObject = new TextField<String>("filterByObject", true, new PropertyModel<String>(searchParams, "objectFilter")); AjaxFormComponentUpdatingBehavior changeF

我有一个
TextField
,其中我添加了一个
ajaxFormComponentUpdateingBehavior
,以在用户写入一些字符串时获取当前值

filterByObject = new TextField<String>("filterByObject", true, new PropertyModel<String>(searchParams, "objectFilter"));
AjaxFormComponentUpdatingBehavior  changeFilterBinded = new AjaxFormComponentUpdatingBehavior ("onkeyup") {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {                         
        target.addComponent(componentToUpdate);
    }
};
filterByObject.add(changeFilterBinded);
filterByObject=newtextfield(“filterByObject”,true,新属性模型(searchParams,“objectFilter”);
AjaxFormComponentUpdateBehavior changeFilterBinded=新的AjaxFormComponentUpdateBehavior(“onkeyup”){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
target.addComponent(componentToUpdate);
}
};
filterByObject.add(changeFilterBinded);
当我在
textfield
中放入一些字符时,将正确调用
onUpdate
方法,并且基于
searchParams
的当前状态,我的组件将正确更改。 不幸的是,当我使用Backspace取消插入的内容时,不会调用
onUpdate

我尝试更改事件(
onkeypress
onkeydown
onchange
等),但不起作用。只有
onChange
起作用,但我必须将焦点转移到另一个组件


如何保存日期?

是否由于按了backspace键,字段中的输入无效(根据添加到字段中的
setRequired
IValidator
s)?如果是,则将调用该方法,而不是更新
onUpdate
,因为用户输入将无效,因此不会使用AjaxFormComponentUpdateingBehavior到达组件的ModelObject

AjaxFormComponentUpdatingBehavior  changeFilterBinded = 
  new AjaxFormComponentUpdatingBehavior ("onkeyup") {
    @Override
    protected void onUpdate(AjaxRequestTarget target) {     
        // Here the Component's model object has already been updated
        target.addComponent(componentToUpdate);
    }
    @Override
    protected void onError(AjaxRequestTarget target, RuntimeException e){
         // Here the Component's model object will remain unchanged, 
         // so that it doesn't hold invalid input
    }
};
请记住,任何涉及ajax组件的
IFormValidator
都不会自动执行,因此您可能有兴趣在更新模型对象之前手动检查输入。您可以告诉
AjaxFormComponentBehavior
不要通过重写来自动更新模型对象。然后,在
onUpdate
方法中,通过
getConvertedInput()
获取组件的新输入

作为旁注,
onkeyup
在按下backspace键时应被触发。至少它在里面是这样,而且当聚焦在外面时,
onchange
通常会在
上触发


此外,HTML5还引入了
oninput
事件处理程序,它可能更适合您的需要。即使在文本字段中复制/粘贴时,它也会被激发。有关更多信息,请参阅以下链接:。

我已尝试,按backspace时将调用onError而不是onUpdate。很抱歉,我不知道如何解决此问题。
onError
正在被调用,因为您正在向其添加ajax行为的字段上的验证程序失败。例如,如果该字段是必需的,并且您从中删除了所有字符,则该字段的输入无效,因此Wicket会阻止它访问模型对象。问题是,在这种情况下你想做什么?如果是您正在更新的搜索结果,您可能有兴趣清除结果并显示错误(使用
error()
以及
FeedbackPanel
,并将
FeedbackPanel
添加到目标)。请注意,您还可以将组件添加到
onError
中的
AjaxRequestTarget
。谢谢。它起作用了。field的目的只是为了友好地更新电子邮件列表,因此它不是必需的。我不得不停下来复制和粘贴组件(PHehe:),或者利用Wicket的OOP功能定义通用组件——写一次,在任何地方运行!更令人恼火的是,由于模型验证失败,模型对象没有更新。例如,如果您有一个字段,其中写入了一个值,并使用了最小值为0的RangeralIDatar,则不接受空字符串!所以你们输入“5”,模型现在是5,你们按下退格键,错误-但模型保持5。不得不放弃整个wicket ajax处理,改为在jQuery中执行(基本上只是获取一个输入字段并执行一个应在另一个标签中呈现的计算)。