java - 在 play 2.0.3 中拒绝表单而不重新加载页面

标签 java playframework playframework-2.0

在游戏框架中,是否可以拒绝一个字段

filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));

无需重新加载页面?

我有一个文件输入字段,可以让用户选择文件。在拒绝和重新加载时,文件被清除并显示错误。我希望他们选择的文件在那里

当前行为: 提交表单前:

Before

提交后(错误:文件不见了)

Before

最佳答案

文件选择输入字段(即 <input type="file" ... /> )与其他输入字段不同——您无法从服务器端预填充值。如果可以的话,这将是一个巨大的安全漏洞(想想 <input type="file" value="/etc/passwd" .. /> )。在服务器上,当您获得提交的表单时,您无法获得已上传文件的完整路径,只能获得文件名和内容。

如果您真的需要保留文件输入字段的值,则需要采用不同的途径:通过 Ajax 提交表单(谷歌搜索“ajax 文件上传”,了解一些技术和库来帮助解决此问题),并使用 Ajax 响应来指示文件是否有效。


进一步说明:使用正常的 HTML/HTTP post 方法(Play 表单助手使用的方法),原始页面消失了,服务器响应是一个新页面,与前一个页面没有任何联系。 Play 表单助手将使用之前的值预填充此页面上的输入字段,但如上所述,这对于文件输入字段是不可能的。

这就是为什么有专门用于上传文件的 Javascript 库。如果您的表单主要与文件上传有关,您应该查看这些。 (例如 http://fineuploader.com )。在服务器端,Ajax 查询的目标将是一个新的 Action,它只处理上传的文件并返回成功/失败消息,然后您将向用户显示该消息。

关于java - 在 play 2.0.3 中拒绝表单而不重新加载页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658553/

相关文章:

java - 如何使用 EclipseLink 配置 HikariCP

java - 当 bean 具有带有 @Formula 注释的属性时,findRowCount 不起作用

scala - 如何使用 ScalaTest 测试基于 Salat 的方法

java - Android解析日期简单日期格式

java - 你如何证明或说明快速归并排序是一种不稳定的算法?

java - Android 注释在库项目中不起作用

scala - Heroku 上使用 Play Framework 的后台作业

java - Spring hibernate 直到结束才提交

scala - 如何模拟 ActionBuilder 的 BodyParser.Default 参数?

java - play scala 中 Magic 的 ColumnNotFound 问题