我是网络应用程序和游戏框架的新手,我问的问题可能很天真。但是,我用Google搜索了一会儿,找不到合适的答案,所以请耐心等待。
首先,我的平台是play-2.1.1 + java 1.6 + OS X 10.8.3。
问题的简短版本:我有一个提交按钮的形式,其中action =“hello?id = 100”。但是,当我点击该按钮时,发送的请求似乎是hello?
而不是hello?id=100
。此请求的操作需要参数id
,因此我收到hello?
的错误。
这是完整设置。
CONF /路线:
GET / controllers.Application.index()
GET /hello controllers.Application.hello(id: Long)
应用程序/控制器/ Application.java:
package controllers;
import play.*;
import play.mvc.*;
import views.html.*;
public class Application extends Controller {
public static Result index() {
return ok(index.render());
}
public static Result hello(Long id) {
return ok("Hello, No. " + id);
}
}
应用程序/视图/ index.scala.html
This is an index page.
<form name="helloButton" action="hello?id=100" method="get">
<input type="submit" value="Hello">
</form>
根据播放文档,id
应该从查询字符串?id=100
中提取。但是,当我点击提交按钮时,请求变为hello?
而不是hello?id=100
,因此我收到如下错误:
对于请求'GET / hello?' [缺少参数:id]
有人可以告诉我为什么会这样吗?提前谢谢。
答案 0 :(得分:1)
问题出在以下形式:
<form name="helloButton" action="hello?id=100" method="get">
<input type="submit" value="Hello">
</form>
当form方法设置为get时,它正在更改查询字符串。 method="get"
告诉浏览器将表单内容添加到查询字符串中,这意味着当前查询字符串将被删除。
您可以在以下格式中将ID添加为隐藏字段:
<form name="helloButton" action="hello" method="get">
<input type="hidden" name="id" value="100">
<input type="submit" value="Hello">
</form>
这将告诉浏览器将隐藏字段添加到导致hello?id=100
的查询字符串中。或者,您可以将表单方法更改为POST。