有没有办法让Wicket组件在每个页面的AJAX请求上重新呈现? (基本上是为了做ajaxRendered="true"
在RichFaces中的作用。)
我的申请基本上包含以下内容:
应启用或禁用保存和撤消按钮,具体取决于是否有任何记录的更改。由于有多种方法可以输入更改(编辑,导入CSV等),因此我希望避免拦截可能会更改已保存状态的每个操作。
此外,这些按钮仅显示在某些页面上,因此我不想在自定义WebRequestCycle
的页面中嗅探它们。
当一个AJAX请求即将被处理时,是否有一个Wicket调用的钩子,这是为页面上的每个组件调用的?我知道有Component#onBeforeRender()
和Component#onConfigure()
,但是他们的文档没有说明他们何时被要求提供AJAX请求。
答案 0 :(得分:9)
在Wicket 1.5中有一辆活动巴士。对于每个Ajax请求,会向每个组件发送一个事件,组件可以使用AjaxRequestTarget添加自身以进行重新呈现。
E.g:
class MyComponent ... {
public void onEvent(Object payload) {
if (payload instanceod AjaxRequestTarget) {
((AjaxRequestTarget) payload).add(this);
}
}
答案 1 :(得分:2)
我遇到了类似的问题,想到了两个可能的解决方案,我使用了第二个解决方案。
在Ajax-Handler中调用页面上的方法,然后调用访问者查找需要重新呈现的所有子项,并将它们添加到目标。
观察者模式的变体...... 我让我的组件在页面上注册为wantToUpdate并触发了一个函数,将它们全部添加到我的Ajax-Handler中的Requesttarget中。我无法使用开箱即用的观察者模式,因为我的组件彼此不了解,我不想引入这种耦合。