更新
这通常可以通过隐藏的输入字段来完成。据此,有两种渲染隐藏输入的方法,但我更喜欢最简单的一种:
<input type="hidden" name="hiddenData" value="@data" />
在服务器端,您可以从 HashMapfilledForm.data().get("hiddenData")
或通过常规数据绑定机制获取数据。由于您的数据是不确定的,您可以更改输入控件上的名称和值或将 HashMap 传递为data
. 它将像这样呈现:value="{A=B, B=B}"
在服务器端,您将收到 HashMap。
要通过 GET 发送请求,您需要使用通过 GET 在路由文件中访问的控制器,如下所示:
@helper.form(routes.Application.doLoginGetMethod)
通用表格
Play 框架通常缺少许多重要功能的文档,但至少在安装文件夹中有示例。%PLAYINSTALLFODLER%\samples\java\forms 是您所需要的。
文档在这里:Play framework Forms (Scala) Server side(Java) , Templates
无论如何,想法很简单——您可以使用相同的表单 API 来处理客户端和服务器端的表单。
首先创建pojo来存储数据。验证和视觉调整所需的属性:
public static class Login
@Required
@Email
public String email;
@Required
@MinLength(5)
public String password;
}
其次,你需要创建你的表单——它是无状态的,所以可以重用。将其传递给您的视图:
public static final Form<Login> LOGIN_FORM = form(Login.class);
...
public static Result login() {
return ok(loginView.render(LOGIN_FORM));
}
在您的模板上使用 helpers apiviews.html.helper
来呈现表单和控件。它们有很多:checkbox
、select
、options
和。textarea
others
@(loginForm: Form[_])
@import helper._
...
@helper.form(routes.Application.doLogin) { // this differ from original login method
@if(loginForm.hasGlobalErrors) { // example of validation and form data
<p class="error">
@loginForm.globalError.message</span>
</p>
}
@inputText( // Notice the helper
loginForm("email"),
'_showConstraints -> false,
'_label -> "Your email"
)
@inputPassword( // Another helper
loginForm("password"),
'_showConstraints -> true,
'_label -> "Password"
)
<input type="submit" value="Login"> // submit button
}
然后在服务器端接收表单:
public static Result doLogin() {
final Form<Login> filledForm = LOGIN_FORM.bindFromRequest();
// User did not fill everything properly
if (filledForm.hasErrors()) return badRequest(login.render(filledForm));
return Controller.redirect("Hey!");
}
当然,您将需要路线:
GET /login controllers.Application.login
POST /login controllers.Application.doLogin