Chciałbym wiedzieć, jak można pobrać obiekt trasy z łańcucha w klasie global.java, ponieważ próbuję utworzyć dynamiczny routing modułów: nie chcę edytować moje główne szlaki każdym razem dodaję moduł (sub-projektu) jakojava play framework 2.1.3 Jak odświeżyć obiekt tras
->/mymodule mymodule.Routes
więc aby tego uniknąć, jestem tring załadowanie trasy docelowe zależnie od Ścieżka URI. /moduł/mymodule
tryed napisać trochę kodu następująco wewnątrz onRouteRequest()
Class.forName("mymodule.Routes").routes.lift(request);
ale to się nie uda, jakieś sugestie?
edit 1: 1 w grze można było coś takiego:
/{controller}/{action} {controller}.{action}
Ale w PLAY2 wydaje się nie pracy, jak również
edit 2: moja obecna Global.java jest
import play.GlobalSettings;
import play.Play;
import play.api.mvc.Handler;
import play.mvc.Http;
public class Global extends GlobalSettings
{
@Override
public Handler onRouteRequest(Http.RequestHeader request)
{
String path = request.path();
if (path.startsWith("/module/"))
{
String[] paths = path.split("/");
String router = paths[2];
try
{
return (Handler) Class.forName(router + ".Routes", true, Play.application().classloader()).newInstance();
}
catch (InstantiationException | IllegalAccessException | ClassNotFoundException e)
{
e.printStackTrace();
}
}
return super.onRouteRequest(request);
}
}
Znalazł poprawne trasy, ale wyrzucono wyjątek natychmiastowy
Wywołanie 'newInstance()' wydaje się tutaj nieudane. Czy twój router ma publiczny konstruktor bez parametrów? – Kapep
Problem polega na tym, o czym wspomniał @kapep. Klasa 'Routes' nie ma domyślnego konstruktora. Ma szereg statycznych metod. Jest jeden zwany 'handlerFor', który wydaje się obiecujący, ale wymaga obiektu' play.api.mvc.RequestHeader', a nie wersji Java 'play.mvc.Http.RequestHeader', która jest przekazywana do metody' onRouteRequest'. – estmatic
infact i odzwierciedlone Trasy w sposób statyczny, ale znalazłem te problemy. A więc alternatywne rozwiązania? – user2054758