gpt4 book ai didi

java - 提交表单时 Play Framework POST 路由不运行

转载 作者:行者123 更新时间:2023-12-02 11:56:14 24 4
gpt4 key购买 nike

我以前从未遇到过这种情况,所以我正在寻求帮助。

我有一个简单的单字段表单,其中有一个“提交”按钮,该按钮不会启动它的 POST 路由。该代码几天前还可以运行,但现在它只是不断运行 GET 路由。没有错误,因为它永远不会到达 POST 路由及其正在调用的函数。

路线如下:

GET    /createptp        controllers.Application.ptpCreate()
POST /createptp controllers.Application.ptpSave()

表格如下:

@(ptpForm: Form[Application.PTPForm], lookups: java.util.List[Lookup], users: java.util.List[User])

@main(null) {

<section id="ptpCreated">
<form class="formoid-solid-dark"
style="background-color: #FFFFFF; font-size: 14px; font-family: 'Trebuchet MS', 'Roboto', Arial, Helvetica, sans-serif; color: #34495E; max-width: 480px; min-width: 150px"
method="get" action="">
<div class="title">
<h3>Success</h3>
</div>
<div class="element-number" title="This is the eight-digit Provider ID number that you used for this setting in the portal maintained by Xerox. You may have had different Provider IDs for different services, settings, and/or waivers. Cannot be blank - numbers only">
<label class="title"><span class="required">* Legacy Provider Id...</span></label>
<div class="item-cont"><input type="text" name="legacy_Provider_Id" class='allow_numeric' required="required" min="1" max="99999999" maxlength="8" placeholder=""/><span class="icon-place"></span></div>
</div>
<div class="submit">
<input type="submit" value="Continue" />
</div>
<!-- This is needed for bottom shadow to appear... -->
<div></div>
</form>
</section>

}

以下是 Controller 中的功能:

    public Result ptpCreate() {
// Set some needed values...
List<Lookup> lookups = Lookup.find.all();
List<User> users = User.find.all();
// Sort the lists...
AppGlobals sortThis = new AppGlobals();
Collections.sort(users, sortThis.new sortUsers());
Collections.sort(lookups, sortThis.new sortLookups());
return ok(adult1.render(form(PTPForm.class), lookups, users));
}

public Result ptpSave() {
Form<PTPForm> ptpEntry = form(PTPForm.class).bindFromRequest();

if (ptpEntry.hasErrors()) {
List<Lookup> lookups = Lookup.find.all();
List<User> users = User.find.all();
Logger.debug("Save ptp - errors");
// Sort the lists...
AppGlobals sortThis = new AppGlobals();
Collections.sort(users, sortThis.new sortUsers());
Collections.sort(lookups, sortThis.new sortLookups());
return badRequest(adult1.render(ptpEntry, lookups, users));
}

String userkey = AccessMiddleware.getSessionUserKey();
User user = null;
user = User.findByUserKey(userkey);

// Save the PTP record....
PTP ptp = new PTP();
PTPForm ptpForm = ptpEntry.get();

ptp.setLegacy_Provider_Id(ptpForm.legacy_Provider_Id);

ptp.save();

return ok(ptpcreated.render(ptp.getPtpkey()));
}

当我单击“继续”按钮时,它只是返回到 ptpCreate()功能,甚至不关心 POST 路由。

我执行了cleancompile运气不好。

我尝试更改 <form action>action="@routes.Application.ptpSave()"也没有运气。

我完全迷失在这个问题上,因为没有任何错误可供追踪。

最佳答案

正如 @jrook 提到的,您需要确保 <form>标签使用 POST 方法。如您的问题所示,您的 <form>method="get" .

如果你查看你的路线,GET /createptp转到controllers.Application.ptpCreate()POST /createptp转到controllers.Application.ptpSave() 。它们都有相同的 URL,因此发送请求的方法非常重要。

当您使用action="@controllers.routes.Application.ptpSave()"时您已经获得了正确的 URL,但您仍在发送 GET 请求,因此它将转到 controllers.Application.ptpCreate()而不是controllers.Application.ptpSave() .

修复方法是使用 method="POST"路由至controllers.Application.ptpSave() .

另一种方法是使用表单模板帮助程序在给定反向路由的情况下呈现正确的方法和操作。例如。 @helper.form(action = controllers.routes.Application.ptpSave()) { ... } 。这将呈现 <form method="GET" action="/createptp">...</form> 。请参阅:https://www.playframework.com/documentation/2.6.x/JavaFormHelpers#Creating-a-%3Cform%3E-tag .

将来调试类似的东西可以使用两种技术:

  1. 使用curl手动发送POST请求到/createptp检查它是否有效。

  2. 使用浏览器的开发人员工具测试提交表单时发送的请求类型。

我最近创建了一个 Play Framework 问题来改进该领域的文档:https://github.com/playframework/playframework/issues/8004 。如果您对此有任何想法,请随时发表评论。

关于java - 提交表单时 Play Framework POST 路由不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com