gpt4 book ai didi

java - Wicket 口 AJAX + OnComponentTag

转载 作者:行者123 更新时间:2023-12-04 20:39:08 25 4
gpt4 key购买 nike

大家好,我想将 AJAX 事件添加到我的主页,但它不起作用!我想通了,如果我删除 onComponentTag 函数,它会很好地工作。我不知道为什么会这样,也许你能帮帮我!那是我的代码:

  final TextField<String> searchInput = new TextField<String>("searchInput", model) {

@Override
protected void onComponentTag(final ComponentTag tag) {
super.onComponentTag(tag);
tag.put("id", this.getId());
if (params.getString("search") != null) {
tag.put("value", params.getString("search"));
}
}
};

searchInput.add(new AjaxFormComponentUpdatingBehavior("onfocus") {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
System.out.print("never saw that message :(");
searchInput.setDefaultModelObject("");
target.addComponent(searchInput);
}

});

非常感谢您对我的帮助!铜

最佳答案

首先,您根本不需要重写 onComponentTag()。正如 seanizer 所述,如果您真的需要自己指定标记 ID,请使用 setMarkupId(id)。你应该明白为什么建议 Wicket 管理组件 ID。

其次,您添加的 value 属性是不必要的 - Wicket 会自动为该组件添加该属性。分配的值是组件的模型对象的值。请参阅 TextField.onComponentTag() 的源代码。

第三,再次如 seanizer 所述,要由 ajax 更新的组件需要输出它们的标记 ID - Wicket 的 ajax 实现使用 ID 作为元素的选择器。此外,所有扩展 AbstractDefaultAjaxBehavior 的 Wicket ajax 行为都会自动在它们绑定(bind)到的组件上设置 outputMarkupId(true)(请参阅 AbstractDefaultAjaxBehavior.onBind() 的源代码)。这包括 AjaxFormComponentUpdatingBehavior。

所以:

String id = "searchInput";
final TextField<String> searchInput = new TextField<String>(id, model);
searchInput.setMarkupId(id);

searchInput.add(new AjaxFormComponentUpdatingBehavior("onfocus") {
@Override
protected void onUpdate(final AjaxRequestTarget target) {
System.out.print("never saw that message :(");
searchInput.setDefaultModelObject("");
target.setOutputMarkupId(true);
target.addComponent(searchInput);
}
});

最后,我想问一下您实际上是想通过这种行为达到什么目的。我看不出有任何理由将此事件往返到服务器。肯定是一些客户端JS更合适吧?

关于java - Wicket 口 AJAX + OnComponentTag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3334295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com