0

ビューページにdynatreeがあり、ドラッグアンドドロップ操作ごとにツリーの現在の状態を保存したいのですが、問題は、そのdictオブジェクトをコントローラーに渡せないことです。ajaxのコードは以下のとおりです:

 onDrop: function(node, sourceNode, hitMode, ui, draggable) {
        /** This function MUST be defined to enable dropping of items on
         * the tree.
         */
        logMsg("tree.onDrop(%o, %o, %s)", node, sourceNode, hitMode);
        sourceNode.move(node, hitMode);
        //save state to backend
     var currentTree = $("#tree").dynatree("getTree").toDict();
            $.post("/Application.java", { recieved: currentTree},
               function(data) {
                 $("#output").html(data);
             });


         //expand the drop target
        sourceNode.expand(true);
      },

その辞書オブジェクトを取得するメソッドをJavaで記述しました。しかし、ルートファイルでエラーが発生します。エラー:見つかりません:この行に辞書を入力してください

POST / hello /:dict controllers.Application.check(dict:Dictionary)

4

1 に答える 1

0

コードに多くの問題があります。

まず、主な問題として、routesファイルはクラスを認識しているため、コンパイルできませんDictionary。したがって、このクラスの修飾名 (パッケージ + クラス) をファイルに伝える必要があります。

POST /hello/:dict controllers.Application.check(dict:package.to.Dictionary)

しかし、私の知る限り、Url ( dict) の動的部分は Url で印刷可能である必要があるため、それも機能しない可能性があります。これは、dict をエンコードして Url を呼び出す必要があるためです。言いましょう:/hello/thisIsMyDict

したがって、最善の方法は、ルート ファイル内の URL の動的部分を削除することです。

POST /hello/ controllers.Application.check()

次に、アクションで、たとえばDynamicFormを使用して body パラメーターを取得します。

public static Result check() {
   DynamicForm myForm = form().bindFromRequest();
   String dict = myForm.get("recieved");
   // convert the string to your Dictionary object
   ...
}

最後に、JavaScript コードは次のようになります。

var currentTree = $("#tree").dynatree("getTree").toDict();
$.post("@controllers.routes.Application.check()", { recieved: currentTree},
     function(data) {
        $("#output").html(data);
     });
于 2012-07-22T13:41:08.303 に答える