1

我对 web 应用程序和 play 框架都是新手,我问的问题可能非常幼稚。但是,我用谷歌搜索了一会儿,找不到一个好的答案,所以请多多包涵。

首先,我的平台是 play-2.1.1 + java 1.6 + OS X 10.8.3。

问题的简短版本:我有一个带有 action="hello?id=100" 的提交按钮形式。但是,当我单击按钮时,发送的请求似乎是hello?而不是hello?id=100. 此请求的操作需要参数id,所以我得到一个错误hello?

这是完整的设置。

配置/路由:

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]

有人可以告诉我为什么会这样吗?先感谢您。

4

1 回答 1

1

问题出在表格上:

<form name="helloButton" action="hello?id=100" method="get">
    <input type="submit" value="Hello">
</form>

由于表单方法设置为获取,它正在更改查询字符串。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。

于 2013-05-13T17:20:02.950 回答