好吧,我的标题有点难以理解。
我想要实现的目标如下。
我的 Controller :
public static Result addSomething() {
return getSomething(SOME_FORM);
}
public static Result addSomething(Form<SomeFormDetails> someForm) {
// Do complicated stuff to get someObject and someOtherObject
return ok(com.me.views.html.pages.AddSomething
.render(someObject, someOtherObject, someForm));
}
public static Result postFromSomeForm() {
Form<SomeFormDetails> filledForm = SOME_FORM.bindFromRequest();
SomeFormDetails details = filledForm.get();
// do some checks
if (Database.addStuff(details)) {
return redirect(com.me.controllers.routes.Get.index());
} else {
// #### THIS IS THE IMPORTANT BIT ####
// this next line is not possible as I do not have the
// method addSomething(Form<SomeFormDetails> someForm) mapped
// in routes, but you get what I mean
return badRequest(com.me.controllers.routes.Get.addSomething
.render(filledForm));
// #### THIS IS THE IMPORTANT BIT ####
}
}
路线
GET /something com.me.controllers.Get.addSomething()
POST /something/add com.me.controllers.Get.postFromSomeForm()
我想要避免做的是重复大量不必要的代码来获取 someObject
和someOtherObject
postFromSomeForm()
下的对象方法。
我知道我可以移动 // Do complicated stuff to get someObject and someOtherObject
表示的位进入另一个方法,但由于两个对象的性质,它并不简单。
我可以添加addSomething(Form<SomeFormDetails> someForm)
到路线,如果我重命名(似乎不允许重载方法),但这是不可取的,因为它会导致许多其他问题。
我不能简单地将重要的部分更改为:
return badRequest(com.me.controllers.Get.addSomething.render(filledForm));
因为这是不支持的(即不使用reverseGet)。仅供引用,它给出了 The method badRequest(Content) in the type Results is not applicable for the arguments (Result)
.
我很确定我正在尝试实现一些简单的目标,但在使用此框架时似乎没有一种简单的方法来实现它,因为从路由生成的所有reverseGet位不具有相同的返回类型 Controller 方法(我知道当然是这种情况并且理解这是必需的)
任何人都可以让我知道是否有一种简单的支持方法来实现我想要实现的目标?如果问题没有意义,请告诉我。
最佳答案
只需让该操作返回渲染的模板而不是结果,您就可以实现您想要的目标:
public static String addSomething(Form<SomeFormDetails> someForm) {
// Do complicated stuff to get someObject and someOtherObject
return com.me.views.html.pages.AddSomething
.render(someObject, someOtherObject, someForm).body();
}
// latter
return badRequest(com.me.controllers.routes.Get.addSomething.render(filledForm));
关于java - Play Framework 2.3.4 - 如何在 POST 请求上调用 Results.badRequest() 并定向到 Controller 中未通过路由映射的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26423489/