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.