I started a Maven, Spring, GWTP project based on gwtp-sample-basic-spring. I
added new actions, results, handlers, mapped it in ServerModule. I am stuck
with an application that the only possible action is to sign in. Every other
I posted this post in gwt-dispatch and was redirected to this group.
Thanks,
Marc-Andre
web.xml
------
<!-- GWT-Dispatch Spring -->
<servlet>
<servlet-name>dispatch</servlet-name>
<servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
applicationContext.xml
---------------------------------
<context:component-scan
base-package="com.gwtplatform.dispatch.server.spring"/>
<context:annotation-config/>
<!-- GWT Service Beans -->
<bean class="audit.server.ServerModule"/>
ServerModule.java
--------------------------
/**
* Module which binds the handlers and configurations.
*/
@Configuration
@Import(DefaultModule.class)
public class ServerModule extends HandlerModule {
public ServerModule() {
}
@Bean
public LoginHandler getLoginHandler() {
return new LoginHandler();
}
@Bean
public RetrieveAuditTrailHandler getRetrieveAuditTrailHandler() {
return new RetrieveAuditTrailHandler();
}
@Bean
public ActionValidator getDefaultActionValidator() {
return new DefaultActionValidator();
}
protected void configureHandlers() {
bindHandler(LoginAction.class, LoginHandler.class);
bindHandler(RetrieveAuditTrailListAction.class,
RetrieveAuditTrailHandler.class);
bindHandler(TestAction.class, TestActionActionHandler.class,
LoggedInActionValidator.class);
}
@Bean
public TestActionActionHandler getTestActionActionHandler() {
return new TestActionActionHandler();
}
}
Service call in a presenter
------------
getDispatcher().execute(new TestAction("test"), new
AsyncCallback<TestActionResult>() {
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
Log.debug("TestAction failure!");
}
@Override
public void onSuccess(TestActionResult result) {
// TODO Auto-generated method stub
Log.debug("TestAction successful!");
}
});
Non Working Handler
------------------
public class RetrieveAuditTrailHandler extends
AbstractActionHandler<RetrieveAuditTrailListAction,
RetrieveAuditTrailListResult> {
@Autowired
AuditTrailService auditTrailService;
// @Inject
public RetrieveAuditTrailHandler() {
super(RetrieveAuditTrailListAction.class);
}
@Override
public RetrieveAuditTrailListResult execute(RetrieveAuditTrailListAction
action, ExecutionContext context) throws ActionException {
List<AuditTrail> audits =
auditTrailService.retrieve(action.getFirstResult(), action.getMaxResults());
List<AuditTrailDto> results = new ArrayList<AuditTrailDto>();
for (AuditTrail auditTrail : audits) {
AuditTrailDto dto = new AuditTrailDto();
dto.setId((String) auditTrail.get("_id"));
dto.setApplicationName((String) auditTrail.get("applicationName"));
dto.setServerNode((String) auditTrail.get("serverNode"));
dto.setEventName((String) auditTrail.get("eventName"));
dto.setObjectId((String) auditTrail.get("ojectId"));
dto.setFilename((String) auditTrail.get("filename"));
dto.setDescription((String) auditTrail.get("description"));
}
return new RetrieveAuditTrailListResult(results);
}
@Override
public Class<RetrieveAuditTrailListAction> getActionType() {
return RetrieveAuditTrailListAction.class;
}
@Override
public void undo(RetrieveAuditTrailListAction action,
RetrieveAuditTrailListResult result, ExecutionContext context)
throws ActionException {
// Do nothing
}
}
Working Handler
------------------------
public class LoginHandler extends AbstractActionHandler<LoginAction,
LoginResult> {
@Autowired
private ServletContext servletContext;
@Autowired
UserService userService;
public LoginHandler() {
super(LoginAction.class);
}
@Override
public LoginResult execute(final LoginAction action, final
ExecutionContext context) throws ActionException {
LoginResult result = null;
try {
User user = userService.retrieveUser(action.getLogin());
if (user != null && isValidLogin(action, user)) {
servletContext.setAttribute("login.authenticated", action.getLogin());
String sessionKey = UUID.randomUUID().toString();
servletContext.setAttribute("sessionId", UUID.randomUUID());
result = new LoginResult(sessionKey);
Log.debug(action.getLogin() + " has logged in");
Log.debug("Session key: " + result.getSessionKey());
}
else {
throw new LoginException("Invalid User name or Password.");
}
}
catch (Exception e) {
// log the stack trace
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
Log.debug("Exception e: " + stringWriter.toString());
// Log.debug("e: " + e);
throw new ActionException(e);
}
return result;
}
private Boolean isValidLogin(LoginAction action, User user) {
Log.debug("LoginHandler - hash: " + " password: " + user.getPassword());
return true;
}
@Override
public Class<LoginAction> getActionType() {
return LoginAction.class;
}
@Override
public void undo(LoginAction action, LoginResult result,
ExecutionContext context) throws ActionException {
}
}