A
- The type of the action.R
- The type of the result.public interface ClientActionHandler<A,R>
ClientActionHandler
that has been registered with the bound
ClientActionHandlerRegistry
is called and
DispatchAsync
or
RestDispatch
does not automatically send the command over
HTTP to the server.
Client Action Handlers provide a number of flexible options:
ClientActionHandler
can take over and communicate directly with the server, possibly using a
different mechanism.
// Interface of cache singleton
public interface Cache {
<A extends Action<R>, R> R get(A action);
<A extends Action<R>, R> void put(A action, R result);
}
// Client action handler that injects the cache
public class RetrieveFooClientActionHandler
extends AbstractCachingClientActionHandler<RetrieveFooAction, RetrieveFooResult> {
@Inject
RetrieveFooClientActionHandler(Cache cache) {
super(RetrieveFooAction.class, cache);
}
}
// abstract client action handler that:
// - first checks cache and returns result immediately if found in cache
// - executes command on server
// - saves result to cache before returning it
public abstract class AbstractCachingClientActionHandler<A extends Action<R>, R>
extends AbstractClientActionHandler<A, R> {
private final Cache cache;
public AbstractCachingClientActionHandler(Class<A> actionType, Cache cache) {
super(actionType);
this.cache = cache;
}
@Override
public DispatchRequest execute(final A action, final AsyncCallback<R> resultCallback,
ExecuteCommand<A, R> executeCommand) {
R cacheResult = cache.get(action);
if (cacheResult != null) {
resultCallback.onSuccess(cacheResult);
return new CompletedDispatchRequest();
} else {
return executeCommand.execute(action, new AsyncCallback<R>() {
@Override
public void onSuccess(R result) {
if(!request.isCancelled()) {
cache.put(action, result);
resultCallback.onSuccess(result);
}
}
@Override
public void onFailure(Throwable caught) {
resultCallback.onFailure(caught);
}
});
}
}
}
Modifier and Type | Method and Description |
---|---|
DispatchRequest |
execute(A action,
AsyncCallback<R> resultCallback,
ExecuteCommand<A,R> executeCommand)
Handles the specified action.
|
Class<A> |
getActionType() |
DispatchRequest |
undo(A action,
R result,
AsyncCallback<Void> callback,
UndoCommand<A,R> undoCommand)
Undoes the specified action if supported.
|
DispatchRequest execute(A action, AsyncCallback<R> resultCallback, ExecuteCommand<A,R> executeCommand)
com.gwtplatform.dispatch.client.DelegatingDispatchRequest#isCancelled()
against the request parameter.action
- The action to execute.resultCallback
- The callback to use to communicate the result of the action. Unless the request is
cancelled, you must invoke AsyncCallback.onSuccess(T)
on this callback once you have
obtained the result. If any failure occurs call AsyncCallback.onFailure(java.lang.Throwable)
.executeCommand
- Call ExecuteCommand.execute(Object, com.google.gwt.user.client.rpc.AsyncCallback)
on this object to send the action over to the server.
As a parameter you can pass resultCallback
or your custom AsyncCallback
if
you want to process the result.DispatchRequest
object. Never return null
, instead return a new
CompletedDispatchRequest
if you executed,
cancelled or ignored the action.DispatchRequest undo(A action, R result, AsyncCallback<Void> callback, UndoCommand<A,R> undoCommand)
com.gwtplatform.dispatch.client.DelegatingDispatchRequest#isCancelled()
against the request parameter.action
- The action to undo.result
- The result to undo.callback
- The callback to use to indicate when the action has been undone. Unless the request is
cancelled, you must invoke AsyncCallback.onSuccess(T)
on this callback when you have
successfully undone the action. If any failure occurs call AsyncCallback.onFailure(java.lang.Throwable)
.undoCommand
- Call UndoCommand.undo(Object, Object, com.google.gwt.user.client.rpc.AsyncCallback)
on
this object to send the action over to the server via gwt-rpc. As a parameter you can pass
callback
or your custom AsyncCallback
if you want to perform any processing
following the undo.DispatchRequest
object. Never return null
, instead return a new
CompletedDispatchRequest
if you executed,
cancelled or ignored the action.Copyright © 2010–2014 Arcbees. All rights reserved.