【问题标题】:Wicket Page's ListView LoadableDetachableModel is modified via AJAX call. Page doesn't re-drawWicket Page 的 ListView LoadableDetachableModel 是通过 AJAX 调用修改的。页面不重新绘制
【发布时间】:2017-02-22 03:32:40
【问题描述】:

考虑一个子类WebPage 的页面。它的构造函数创建 并添加一个WebMarkupContainer,其中包含一个ListView 组件 由LoadableDetachableModel 支持。

该页面还添加了AbstractDefaultAjaxBehavior 的两个匿名子类实例[每个都覆盖类的renderHeadrespond 方法]。

相应的 HTML 包含一个由wicket:id 绑定到 WMC 的 <div> 和一个<table><tr> 绑定到ListView 组件的ListItems

页面第一次正确显示。

基于用户与客户端的交互,所讨论的AbstractDefaultAjaxBehavior 设置有关模型的模型对象的信息。该信息旨在用于更改特定listitem 在表格行内显示为<td> 的方式——特别是选定行的文本应以粗体显示。

诊断调试器断点和System.out两侧的信息 AJAX 调用确认行为的respond 方法被正确调用并且模型对象被正确修改。

页面不会自动重新绘制。 手动重新加载页面 从浏览器显示正确的行为。

我研究了这个问题,发现了各种可能相关的问题 我尝试过的解决方案,包括

  • 从行为的调用target.add( webMarkupContainer); respond方法,结合

  • respond 方法调用target.appendJavaScript( "window.location.reload();" );

  • respond 方法以及从页面上重写的 onBeforeRender 方法调用 setResponsePage( this );setResponsePage( Page.class );setResponsePage( getPage() );

有什么建议吗?

【问题讨论】:

    标签: java ajax listview model wicket


    【解决方案1】:

    AbstractDefaultAjaxBehavior 不会自动更新任何组件。

    target.add( webMarkupContainer) 有帮助吗?如果没有,你打电话给webMarkupContainer.setOutputMarkupId(true)了吗?

    【讨论】:

    • 我以各种组合方式同时使用了这两种方法,但均未成功。我跟随你的领导AbstractDefaultAjaxBehavior 并重新将有问题的事件实现为AjaxEventBehavior,现在可以工作了。谢谢你的提示——我想我在路上的某个地方错过了那个有用的地方。如果有人不介意,他们能否指出我描述抽象类的非更新性质的相关参考信息。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 1970-01-01
    • 2015-02-24
    相关资源
    最近更新 更多