繁体   English   中英

如何在Play框架中将字典对象从Ajax传递到控制器类

[英]how to pass dictionary object from ajax to controller class in play framework

我的视图页面中有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中编写了一个获取该字典对象的方法。但是它给了我路由文件错误。 错误:未找到:在此行中键入Dictionary

POST / hello /:dict控制器.Application.check(dict:Dictionary)

您的代码中有很多问题。

首先,对于主要问题,无法编译routes文件,因为它确实知道您的类Dictionary 因此,您必须告诉文件此类的合格名称(包+类):

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

但是AFAIK可能也不起作用,因为Url( dict )的动态部分应该可在Url中打印,因为您必须调用编码有dict的Url。 假设: /hello/thisIsMyDict

因此,最好的选择是在路由文件中删除网址的动态部分:

POST /hello/ controllers.Application.check()

然后,在您的操作中,使用DynamicForm例如获取主体参数:

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);
     });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM