All detach() methods on any Component, RequestCycle, Session are called eachtime Wicket decides to remove/finish it. In most cases it means, that rendering is finished and response is prepared to send back to the browser. The main idea of detaching is to detach anything that needn't persist in memory.
There is no definition on calling detach just once. It can be called so many times as required.