传递选择的选择值以形成动作

时间:2012-06-04 12:45:57

标签: scala playframework-2.0

根据系统当前选择的帐户,我想要一个菜单​​。

我有一个页面,允许用户从html选择中选择一个帐户。当用户从帐户选择页面提交表单时,我想在控制器上调用菜单方法传递所选值,以便我的网址看起来正确。

以下是页面中允许用户选择帐户的现有模板:

@helper.form(action = routes.Accounts.menu {
    <table>
        <tr>
            <td><select id="accountNames">
                @accountNames.map { name =>
                    <option value="@name">@name</option>
                }
            </select></td>
        </tr>
        <tr>
            <td>
                <p>
                    <input type="submit" value="Choose">
                </p>
            </td>
        </tr>
    </table>
}

从我的路线档案:

GET /account/:accountName/menu controllers.Accounts.menu(accountName: String)

如何从我的select(id =“accountNames”)中引用所选值并将其传递给我的表单操作?

1 个答案:

答案 0 :(得分:4)

实际上我认为你这样做是错误的。

如果表单的操作必须改变使用'select',则必须使用JS完成。 因此,当提交表单(事件submit)时,您必须更新网址。

使用javascriptRoutes可以轻松完成此操作。

所以你必须做几件事:

1 /创建javascriptRouter(假设您将其添加到Application.scala

def javascriptRoutes = Action {
  Ok(
    Routes.javascriptRouter("playRoutes")(
      //accounts
      controllers.routes.javascript.Accounts.menu
    )
  ).as("text/javascript")
 }

2 /在routes文件中定义

# Javascript routing
GET     /assets/javascripts/routes      controllers.Application.javascriptRoutes

3 /在视图中添加相关的javascript文件导入,例如在main.scala.html

<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>

4 /在表单中添加submit处理程序,在执行默认行为

之前执行此操作
$("form").submit(function () {
    //this computes the correct URL giving a parameter which is the value of the selected option
    var newURl = playRoutes.controllers.Accounts.menu($("#accountNames").val()).url
    $(this).attr("action", newUrl); 
})

注意我们如何在控制器(1)和JS调用(4)中使用playRoutes