質問は明らかかもしれませんが、これに対する適切な解決策をまだ見つけることができません。
メソッドが 1 つしかないコントローラーがあるとします。
class MyController extends Controller {
public static Result sum(int op1, int op2) {
return ok(op1 + op2);
}
}
Routes ファイルもシンプルです。
GET /sum controllers.MyController.sum(op1: Integer, op2: Integer)
さて、今私はテンプレートから呼び出すことができます:
@controllers.routes.MyController.sum(1, 2)
これはに翻訳されます
localhost:9000/sum?op1=1&op2=2
、またはこの URL をブラウザに直接貼り付けます。これはかなりうまくいきます。
しかし、これを行うためにajaxを使用することにすると、すべてがうまくいきません。私は js の第一人者ではないので、onClick ハンドラーをボタンに追加する jQuery を使用して小さな (そして悪いと思います:) オブジェクトを作成します。ここにあります:
entityController.setSumURL = function(sumURL) {
this.sumURL = sumURL;
}
entityController.bindSumButton = function(buttonId, op1, op2) {
$.get(entityController.sumURL, {op1: op1, op2, op2}, function(){
alert("Done!");
});
}
ここで、entityController.sumURL は /sum メソッドへの URL である必要があります。通常、ページ ビューをレンダリングするときは、次のように記述します。
@()
....
entityController.setSumURL("@controllers.routes.MyController.sum()")
....
しかし、sum メソッドには必須の引数があり、バインドされた URL がルートで定義された関数に渡されるパラメーターに依存できるため、アドレスを取得する方法がないため、これを行うことはできません。
問題は、引数なしで url からのみパスを取得する方法、またはそのような状況を回避するためにプロセス全体を再編成する方法です。
私の解決策は、ルートに表示される関数から引数を削除し、リクエストから直接クエリすることですが、私のプロジェクトは成長しており、メソッドに渡されるパラメーターを理解するのが難しくなることがあります。