Я недавно пытался начать использовать Grails, и теперь я хочу интегрировать свою клиентскую часть gwt в проект grails.Я использую плагин Grails GWT и в итоге исправил все ошибки компилятора, кроме этой:
Compiling module com.CalendarMVP
| Resolving com.client.mvp.AppPlaceHistoryMapper
| Found type 'com.client.mvp.AppPlaceHistoryMapper'
| [ERROR] Annotation error: cannot resolve com.client.place.HelloPlace$Tokenizer
| java.lang.ClassNotFoundException: com.client.place.HelloPlace$Tokenizer
И те же повторы для GreetingsPlace $ Tokenizer и UserPlace $ Tokenizer, за исключением того, что я также получаю:
[ERROR] Annotation error: expected class java.lang.Class, got null
Эти классы являются частью моей реализации шаблона MVP, использующей встроенную платформу ActivityAndPlaces. Код для AppPlaceHistoryMapper такой:
package com.client.mvp;
import com.google.gwt.place.shared.PlaceHistoryMapper;
import com.google.gwt.place.shared.WithTokenizers;
import com.client.place.GoodbyePlace;
import com.client.place.GreetingsPlace;
import com.client.place.HelloPlace;
import com.client.place.ManagerCalendarPlace;
import com.client.place.ManagerPlace;
import com.client.place.UserPlace;
@WithTokenizers( { HelloPlace.Tokenizer.class, GoodbyePlace.Tokenizer.class,
GreetingsPlace.Tokenizer.class, ManagerPlace.Tokenizer.class,
UserPlace.Tokenizer.class, ManagerCalendarPlace.Tokenizer.class
})
public interface AppPlaceHistoryMapper extends PlaceHistoryMapper {
}
А для HelloPlace:
package com.client.place;
import com.google.gwt.place.shared.Place;
import com.google.gwt.place.shared.PlaceTokenizer;
public class HelloPlace extends Place {
private String helloName;
public HelloPlace(String token)
{
this.helloName = token;
}
public String getHelloName()
{
return helloName;
}
public static class Tokenizer implements PlaceTokenizer<HelloPlace>
{
@Override
public String getToken(HelloPlace place)
{
return place.getHelloName();
}
@Override
public HelloPlace getPlace(String token)
{
return new HelloPlace(token);
}
}
}
В конце списка ошибок у меня также есть:
Computing all possible rebind results for 'com.client.mvp.AppPlaceHistoryMapper'
| Rebinding com.client.mvp.AppPlaceHistoryMapper
| Invoking generator com.google.gwt.place.rebind.PlaceHistoryMapperGenerator
| [ERROR] Generator 'com.google.gwt.place.rebind.PlaceHistoryMapperGenerator' threw an exception while rebinding 'com.client.mvp.AppPlaceHistoryMapper'
| java.lang.NullPointerException
и:
[WARN] For the following type(s), generated source was never committed (did you forget to call commit()?)
| [WARN] com.client.mvp.AppPlaceHistoryMapperImpl
| [ERROR] Errors in 'file:/D:/Naukma/Programing/JavaEE/STSworkspace/SocSystemGrails/src/gwt/com/client/CalendarMVP.java'
| [ERROR] Line 47: Failed to resolve 'com.client.mvp.AppPlaceHistoryMapper' via deferred binding
В onModuleLoad () я создаю AppPlaceHistoryMapper таким образом:
public void onModuleLoad()
{
ClientFactory clientFactory = GWT.create(ClientFactoryImpl.class);
EventBus eventBus = clientFactory.getEventBus();
PlaceController placeController = clientFactory.getPlaceController();
ActivityMapper activityMapper = new AppActivityMapper(clientFactory);
ActivityManager activityManager = new ActivityManager(activityMapper, eventBus);
activityManager.setDisplay(appWidget);
AppPlaceHistoryMapper historyMapper= GWT.create(AppPlaceHistoryMapper.class);
PlaceHistoryHandler historyHandler = new PlaceHistoryHandler(historyMapper);
historyHandler.register(placeController, eventBus, defaultPlace);
RootPanel.get().add(appWidget);
// Goes to place represented on URL or default place
historyHandler.handleCurrentHistory();
}
Я только начал работать с Grails и, возможно, я что-то затуманиваю.Кто-нибудь может мне помочь?