Return 在 Play 框架中连续提交表单失败后返回上一页
Return to previous page after continuous unsuccessful form submissions in Play framework
我想在我的 PlayFramework Java 控制器中获取上一页的 URL。我知道可以通过以下方式获得它:
String refererUrl = request().getHeader("referer");
但想象一下包含一个带有“保存”和“取消”按钮的表单的页面。如果用户按下保存按钮,表单将在控制器中进行控制,如果存在一些错误,则会转到同一页面并要求用户更正表单。
现在假设用户没有正确输入数据,因此他返回表单进行更正。现在用户再次不更正表格并第二次按“保存”。因此它将再次重定向到表单。现在如果用户按下取消,它将转到最后一页,这是有错误的表单,这不是我想要的。
一种方法是将前面的 URL 作为页面的参数。但我真的不喜欢长 URLs,所以有没有其他解决方案?
您可以将引荐来源网址传递到模板中:
控制器动作:
public Result something() {
String refererUrl = request().getHeader("referer");
return ok(views.html.something.render(refererUrl));
}
然后您可以为 'cancel' 按钮创建一个条件。
模板:
@(referer: String)
@if(referer.equals("THE_URL_YOU_DONT_WANT_TO_REDIRECT") {
<a href="the page you would like him to redirect"> cancel </a>
} else {
<a href="@referer"> cancel </a>
}
您可以使用 Ajax 表单提交请求并在 JavaScript 中进行重定向。通过这种方式,您可以根据您的请求决定是否正确或有错误,重定向或仅使用表单验证错误更新页面。
您的表单可能如下所示:
<form id="myForm" method="post" action="/">
<!-- My input -->
<button type="button">Cancel</button>
<input type="submit" value="Save">
</form>
在你的 JavaScript 中:
$("#myForm").submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: "mySubmitURL",
data: $('#myForm').serialize(),
success: function(response) {
// Redirect to the new page
},
error: function(response) {
// Show your errors that you submitted in the response
}
});
});
现在您需要一个控制器来处理 POST 请求和 returns 表单错误 JSON 以防出现以下情况:
public Result mySubmitURL() {
Form<MyModel> form = Form.form(MyModel.class)
.bindFromRequest();
if (form.hasErrors()) {
return badRequest(form.errorsAsJson());
}
// Do something with your form data, e.g. store it
return ok();
}
我想在我的 PlayFramework Java 控制器中获取上一页的 URL。我知道可以通过以下方式获得它:
String refererUrl = request().getHeader("referer");
但想象一下包含一个带有“保存”和“取消”按钮的表单的页面。如果用户按下保存按钮,表单将在控制器中进行控制,如果存在一些错误,则会转到同一页面并要求用户更正表单。
现在假设用户没有正确输入数据,因此他返回表单进行更正。现在用户再次不更正表格并第二次按“保存”。因此它将再次重定向到表单。现在如果用户按下取消,它将转到最后一页,这是有错误的表单,这不是我想要的。
一种方法是将前面的 URL 作为页面的参数。但我真的不喜欢长 URLs,所以有没有其他解决方案?
您可以将引荐来源网址传递到模板中:
控制器动作:
public Result something() {
String refererUrl = request().getHeader("referer");
return ok(views.html.something.render(refererUrl));
}
然后您可以为 'cancel' 按钮创建一个条件。
模板:
@(referer: String)
@if(referer.equals("THE_URL_YOU_DONT_WANT_TO_REDIRECT") {
<a href="the page you would like him to redirect"> cancel </a>
} else {
<a href="@referer"> cancel </a>
}
您可以使用 Ajax 表单提交请求并在 JavaScript 中进行重定向。通过这种方式,您可以根据您的请求决定是否正确或有错误,重定向或仅使用表单验证错误更新页面。
您的表单可能如下所示:
<form id="myForm" method="post" action="/">
<!-- My input -->
<button type="button">Cancel</button>
<input type="submit" value="Save">
</form>
在你的 JavaScript 中:
$("#myForm").submit(function(event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: "mySubmitURL",
data: $('#myForm').serialize(),
success: function(response) {
// Redirect to the new page
},
error: function(response) {
// Show your errors that you submitted in the response
}
});
});
现在您需要一个控制器来处理 POST 请求和 returns 表单错误 JSON 以防出现以下情况:
public Result mySubmitURL() {
Form<MyModel> form = Form.form(MyModel.class)
.bindFromRequest();
if (form.hasErrors()) {
return badRequest(form.errorsAsJson());
}
// Do something with your form data, e.g. store it
return ok();
}