Hello,

in my application I have a table with some custom toolbars. This table shows 
some data from the database if the user clicks an ajax button. But if the user 
clicks the button again, the table will be replaced by a new table with the new 
data. Here an example:

target.add(page.get("table").replaceWith(getNewTable(newData)));

This works fine. :)

Now the problem. When the user clicks the ajax button again the ajax request 
begins running, but the user is able to click one of toolbars of the shown 
table. So I get an exception: the table.toolbar was not found. This is ok 
because of the replacement with a new table. I want to disable the shown table 
while the ajax request is running. If the request detaches the old table will 
be replaced by the new table with enabled toolbars.

I tried to override the onEvent-method of my table. Here you can see the code:
@Override
    public void onEvent(IEvent<?> event){
        if(event.getPayload() instanceof AjaxRequestTarget){
            AjaxRequestTarget actualRequestTaget = 
(AjaxRequestTarget)event.getPayload();
            actualRequestTaget.addListener(new 
AjaxRequestTarget.AbstractListener(){
                @Override
                public void onBeforeRespond(Map<String,Component> map, 
AjaxRequestTarget target) {
                    setEnabled(false);
                }
                @Override
                public void onAfterRespond(Map<String,Component> map, 
AjaxRequestTarget.IJavaScriptResponse response) {
                    setEnabled(true);
                }
            });
        }
    }

But this didn't work. I can click the toolbars while the request is running and 
then I get the old excetion. The table will be disabled if the request has 
finished.

Is there any possibility to realize it?



Mit freundlichen Grüßen
Christoph Manig
Systems Engineer

T-Systems International GmbH
Systems Integration - SC Travel, Transport & Logistics
Hoyerswerdaer Str. 18
01099 Dresden
tel.:   +49 (0) 351 / 8152 - 188
fax:    +49 (0) 351 / 8152 - 209
email:  [email protected]



Reply via email to