Scala 播放表单
Scala Play forms
我有一个奇怪的问题我无法解释。我正在使用播放框架,当我尝试 运行 下面的视图时,它只在我重复下面的表单操作时才有效……它有效,但我知道这是不对的。不胜感激,如果有人可以帮助解释或纠正。
@(errorMessage: String = "")(implicit messages: Messages)
@helper.form(routes.ApplicationHomeController.login) {
@main(title = messages("single.title")) {
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<div id="userbox">
<form action="@{routes.ApplicationController.doLogin()}" method="post"></form>
<form action="@{routes.ApplicationController.doLogin()}" method="post">
<div style="color: red">@errorMessage</div>
<h1 id="logintxt" style="background-color: rgb(11, 146, 9);
background-position: initial;
background-repeat: initial;">Driver Service <b>ß</b>eta</h1>
<div id="submit_giff" style="display: none;">
<hi> Authenticating: <img src="/assets/images/loader-bar.gif" align="absmiddle"> </hi>
</div>
<input id="name" name="userName" placeholder="Username" style="opacity: 1;
background-color: rgb(255, 255, 255);
background-position: initial;
background-repeat: initial;">
<input id="pass" name="password" type="password" placeholder="Password" style="opacity: 1;
background-color: rgb(255, 255, 255);
background-position: initial;
background-repeat: initial;">
<p id="namealert" style="display: none;
opacity: 1;">Username:</p>
<p id="passal" style="display: none;
opacity: 1;">Password:</p>
<input id="loginbtn" style="opacity: 0.2;
cursor: default;" type="submit" value="Login">
</form>
</div>
<script src="/assets/javascripts/login.js"></script>
}
}
两次直接观察。
一:@helper.form(...)
会将 <form>
元素写入最终生成的 HTML 中。然后,您的视图包括其他文字 <form>
嵌套在 内部 第一种形式。 Nested forms are invalid HTML。您有一个表单提交给 routes.ApplicationController.doLogin
,另一个提交给 routes.ApplicationController.login
。谁知道浏览器实际上会提交给其中的哪一个?我们无法真正预测,因为嵌套形式无效。
二:您的 @main(...)
视图嵌套在 内部 您的 @helper.form(...)
中。我假设您的主视图包含 <html>...</html>
。这将导致 HTML 以 <form>
元素开头,inside 即 <html>
元素。这也是非常无效的标记。
我猜这些问题中的一个或两个都是您的问题。
尝试让你生成的 HTML 和 运行 通过像 https://validator.nu/ 这样的 HTML 验证器。修复验证器发现的任何问题,不要嵌套表单,并决定登录表单应实际提交到哪个(单个)路由。
我有一个奇怪的问题我无法解释。我正在使用播放框架,当我尝试 运行 下面的视图时,它只在我重复下面的表单操作时才有效……它有效,但我知道这是不对的。不胜感激,如果有人可以帮助解释或纠正。
@(errorMessage: String = "")(implicit messages: Messages)
@helper.form(routes.ApplicationHomeController.login) {
@main(title = messages("single.title")) {
<link href="http://fonts.googleapis.com/css?family=Open+Sans:400,700" rel="stylesheet" type="text/css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<div id="userbox">
<form action="@{routes.ApplicationController.doLogin()}" method="post"></form>
<form action="@{routes.ApplicationController.doLogin()}" method="post">
<div style="color: red">@errorMessage</div>
<h1 id="logintxt" style="background-color: rgb(11, 146, 9);
background-position: initial;
background-repeat: initial;">Driver Service <b>ß</b>eta</h1>
<div id="submit_giff" style="display: none;">
<hi> Authenticating: <img src="/assets/images/loader-bar.gif" align="absmiddle"> </hi>
</div>
<input id="name" name="userName" placeholder="Username" style="opacity: 1;
background-color: rgb(255, 255, 255);
background-position: initial;
background-repeat: initial;">
<input id="pass" name="password" type="password" placeholder="Password" style="opacity: 1;
background-color: rgb(255, 255, 255);
background-position: initial;
background-repeat: initial;">
<p id="namealert" style="display: none;
opacity: 1;">Username:</p>
<p id="passal" style="display: none;
opacity: 1;">Password:</p>
<input id="loginbtn" style="opacity: 0.2;
cursor: default;" type="submit" value="Login">
</form>
</div>
<script src="/assets/javascripts/login.js"></script>
}
}
两次直接观察。
一:@helper.form(...)
会将 <form>
元素写入最终生成的 HTML 中。然后,您的视图包括其他文字 <form>
嵌套在 内部 第一种形式。 Nested forms are invalid HTML。您有一个表单提交给 routes.ApplicationController.doLogin
,另一个提交给 routes.ApplicationController.login
。谁知道浏览器实际上会提交给其中的哪一个?我们无法真正预测,因为嵌套形式无效。
二:您的 @main(...)
视图嵌套在 内部 您的 @helper.form(...)
中。我假设您的主视图包含 <html>...</html>
。这将导致 HTML 以 <form>
元素开头,inside 即 <html>
元素。这也是非常无效的标记。
我猜这些问题中的一个或两个都是您的问题。
尝试让你生成的 HTML 和 运行 通过像 https://validator.nu/ 这样的 HTML 验证器。修复验证器发现的任何问题,不要嵌套表单,并决定登录表单应实际提交到哪个(单个)路由。