java - Play Framework 2.3.4 - 如何在 POST 请求上调用 Results.badRequest() 并定向到 Controller 中未通过路由映射的方法?

标签 java playframework playframework-2.3

好吧,我的标题有点难以理解。

我想要实现的目标如下。

我的 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()

我想要避免做的是重复大量不必要的代码来获取 someObjectsomeOtherObject 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/

相关文章:

scala - 在 Play 2.1 (scala) 中设置自定义响应头

web-services - Play Framework WS.url 永远卡住

playframework - 在play 2.3.3中,实体一定要get set?

java - 在使用与 OpenJDK 1.8 不同的 JDK 的 Eclipse 项目中使用 OpenJML

java - 在遗传算法中,应该使用什么交叉方法来交叉 Postfix 表达式?

java - @Query 不运行空条件

java - Play Framework 运行应用程序问题

java - 如何将文本文件的第一句话作为点之前的字符串删除?

javascript - 如何使用 Play Framework 和 jQuery 上传和显示文件?

scala - 在 Play Framework 中将 JsObject 追加/添加到 JsArray