2013-10-08 34 views
7

我有一個Ajax事件觸發重繪各種Wicket面板。一些面板在onBeforeRender()方法中有自己的附加計算。如果出現錯誤,我想將其顯示給用戶。但是我無法將FeedbackPanel添加到AjaxRequestTarget,因爲我無法在正在重繪的面板內訪問它。如何獲取組件的Wicket的onBeforeRender()方法內的AjaxRequestTarget?

有沒有辦法讓Wicket組件的onBeforeRender()內的AjaxRequestTarget?一旦第一個組件已經處於onBeforeRender()狀態,是否有可能向Ajax目標添加其他組件?

如果只有需要重繪的面板才能決定是否存在錯誤,是否有更好的方法將FeedbackPanel添加到Ajax目標?

+1

我不知道你的應用程序在做什麼,但我懷疑'onBeforeRender()'的商業邏輯計算是一個好主意。 –

+0

在Wicket 1.4中有一個靜態['AjaxRequestTarget.get()'](http://wicket.apache.org/apidocs/1.4/org/apache/wicket/ajax/AjaxRequestTarget.html#get())方法(似乎已經在Wicket 6中消失了)。但是,正如Robert已經指出的那樣,不應該在'onBeforeRender()'中處理驗證邏輯和更多錯誤報告。 –

回答

10

得到AjaxTarget像這樣做:

AjaxRequestTarget target = requestCycle.find(AjaxRequestTarget.class); 

不幸的是,預期的一樣,我不能分量有一次我在渲染階段是添加到目標。但Wicket提供的接口ITargetRespondListener與方法onTargetRespond(AjaxRequestTarget target)。在這裏,我可以添加任何我想要的目標。

+8

面向未來的讀者。當更少的上下文可用時:'RequestCycle.get()。find(AjaxRequestTarget.class)' –

+0

如何在Wicket版本8中獲取它?這不是同樣的方式,因爲當我更新依賴關係到版本8時它說有些錯誤,但是在文檔中find方法的定義是相同的 – tomurlh