将动态值传递给路由 URI

Posted

技术标签:

【中文标题】将动态值传递给路由 URI【英文标题】:Passing dynamic value to the routes URI 【发布时间】:2013-02-02 13:04:06 【问题描述】:

我正在尝试根据文本框的内容将动态值发送到 Routes URI 路径,但是当我尝试时,它以 null 的形式出现。

这是我尝试过的:

<form action="@Application.hello(myName)" method="get">
Name: <input type="text" name="myName">
<input type="submit" value="Submit">
</form>

我希望将文本框中输入的值传递给路由文件,但它不起作用。如果我传递一个常量字符串,例如:

<form action="@Application.hello('John')" method="get">
Name: <input type="text" name="myName">
<input type="submit" value="Submit">
</form>

然后我的代码工作正常,但我不想要一个常量值;我希望在路由 URI 路径中传递文本框值。

编辑

使用上面的代码,每次点击按钮并提交表单时,URL都会包含/.../John的名称,因为我已经对其进行了硬编码。

我想要实现的不是将名称硬编码为John。 URL 中的名称将来自用户在文本框中输入的内容。例如如果用户输入的名称是Mike,那么根据用户文本框输入,URL 应该是/.../Mike 等等。

简单来说,我不想将值硬编码为John,但愿意根据文本框输入使其动态化。

请告诉我该怎么做。

问候,

【问题讨论】:

【参考方案1】:

您正在尝试路由到尚未指定的用户名的 URL。

在页面加载时,当用户没有将 John 指定为名称时,Play 不知道您想要 hello /name/John。

为了让你做你想做的事情,你需要使用 javascript 在提交时更改表单操作 url 以将操作 url 替换为 /name/(value of myName input field)

或者,您可以将其拆分为两个单独的控制器操作。

路线:

POST /greet  Application.greet
GET  /users/myName  Application.hello

Application.java

// accepts the form request with the myName paramater
public static void greet(String myName) 
    // redirects the user to /users/myName
    Application.hello(myName);


// welcomes the user by name
public static void hello(String myName) 
    render(myName);

查看模板:

<-- this url should be /greet  (noted we are submitting via POST) -->
<form action="@Application.greet()" method="post">
Name: <input type="text" name="myName">
<input type="submit" value="Submit">
</form>

【讨论】:

没有。在文本框中输入名称后,当用户单击按钮时,我想在 URL 中附加名称。我不想硬编码该值,因为它对于不同的用户来说是不同的名称。我想动态传递它。 我已经编辑了最初的帖子,请看一下并告诉我。 我认为您混淆了两个不同的概念。您希望用户提交指定名称的表单。另外,您希望用户到达一个看起来像 /name/myName 的页面。您可以在表单提交后通过重定向来执行此操作。

以上是关于将动态值传递给路由 URI的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 azure databricks 中的列值将静态值传递给动态值

如何将动态值传递给 TwiML

将某个值动态传递给 Vue.js 中的计算函数

将动态URL值传递给角度js控制器

如何将动态数量的输入值传递给 Symfony2.1 中的控制器

如何将指令的范围值作为$ scope传递给控制器