動的モジュールルーティングを作成しようとしているため、glob.javaクラスの文字列からルートオブジェクトを取得する方法を知りたいと思います。私 主要なルートを編集するために、私はJavaプレイフレームワーク2.1.3ルートオブジェクトの取得方法
としてモジュール(サブプロジェクト)を追加するたびに - > /のmymodule mymodule.Routes
だからこれを避けるために、私はに依存し、目標ルートをロードするためにトリングよURIパス。 /モジュール/のmymodule
onRouteRequestの内側に従うように私は
Class.forName("mymodule.Routes").routes.lift(request);
)(いくつかのコードを書くためにしようと試みたが、それは失敗し、任意の提案ですか?
編集1は:劇1でそのような可能なものだった:
/{controller}/{action} {controller}.{action}
をしかしPLAY2で同様に動作いけないようです
編集2:私の現在のGlobal.javaが
です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);
}
}
正しいルートが見つかりましたが、インスタント例外がスローされました
ここでは、 'newInstance() 'の呼び出しは失敗するようです。あなたのルータにはパラメータのないパブリックコンストラクタがありますか? – Kapep
問題は@kapepが何を言及したかです。 'Routes'クラスはデフォルトのコンストラクタを持っていません。静的メソッドがたくさんあります。有望に思える 'handlerFor'と呼ばれるものがありますが、' play.vm.RequestHeader'オブジェクトは 'onRouteRequest'メソッドに渡されるJavaバージョンの' play.mvc.Http.RequestHeader'ではなく、 'play.api.mvc.RequestHeader'オブジェクトを取ります。 – estmatic
infact私は静的な方法でルートを反映しましたが、私はこれらの問題を発見しました。代替のソリューションですか? – user2054758