[英]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.