我有一个关于在 URL 中隐藏参数的类似问题,我希望我的解决方案能在某种程度上帮助你。唯一的区别是我不想传递极长的 URL 参数,因为我需要传递 JSON 数据。与您不想传递秘密信息的问题不同。
所以我做了 estmatic 在他的评论中所说的将信息放在隐藏的表单字段中:
<form class='someDynamicForm' method='post' action='@routes.Application.function()'>
<textarea name="jsonHolder" style="display: none">
"Used javascript to insert the data I want in here"
</textarea>
</form>
为了获得更大的灵活性,您不必使用 abutton
来提交。每当您准备好提交表单时,您都可以随时调用 javascript 代码document.someDynamicForm.submit();
现在在控制器端,您可以通过执行以下操作检索 textarea 中的信息:
public static Result function() {
DynamicForm dynamicForm = DynamicForm.form().bindFromRequest();
String jsonData = dynamicForm.get("jsonHolder");
return;
}
然后在您的路线文件中确保具体:
POST /json controllers.Application.function()
这里的缺点是你希望你的 ID 是一个秘密。所有“黑客”所要做的就是右键单击 -> 查看页面源,他们可以在隐藏的文本字段中看到信息。
我在整个网络会话中传递信息的另一个解决方案是使用 Play 内置的Session
http://www.playframework.com/documentation/2.1.x/JavaSessionFlash
您是否考虑过使用类似的东西?由于您似乎会经常使用用户的 ID,因此将他们的 ID 信息保存在 Session 中(最终暴露在他们的 cookie 中)可能需要研究一下。