在游戏框架中,是否可以拒绝某个字段
filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));
没有重新加载页面?
我有一个文件输入字段,可让用户选择文件。在拒绝和重新加载时,文件被清除并显示错误。我希望他们选择的文件在那里
目前的行为: 在提交表格之前:
提交后(错误:文件消失)
答案 0 :(得分:3)
文件选择输入字段(即<input type="file" ... />
)与其他输入字段不同 - 您无法预先填充服务器端的值。如果可以,这将是一个巨大的安全漏洞(想象<input type="file" value="/etc/passwd" .. />
)。在服务器上,当您收到提交的表单时,您没有获得上传文件的完整路径,只有文件名和内容。
如果你真的需要保留文件输入字段的值,你需要采用不同的方法:通过Ajax提交表单(google上的“ajax文件上传”,以获取一些技巧和库来帮助解决这个问题),并使用Ajax响应来指示文件是否有效。
进一步澄清:使用普通的HTML / HTTP post方法(Play表单帮助程序使用),原始页面消失了,服务器响应是一个新页面,没有与前一页面的连接。 Play表单助手将使用之前的值预先填充此页面上的输入字段,但如上所述,这对于文件输入字段是不可能的。
这就是为什么有用于上传文件的专用Javascript库的原因。如果您的表单主要关注文件上传,您应该查看这些内容。 (例如http://fineuploader.com)。在服务器端,Ajax查询的目标将是一个新的Action,它只处理上传的文件并返回成功/失败消息,然后您将向用户显示该消息。
答案 1 :(得分:3)
如果服务器能够操作文件字段的值,那将是一个主要的安全风险,因为我们可以从用户硬盘驱动器中获取任何文件。如果我们看看你有两个要求,
唯一的选择是使用AJAX文件上传器。所以你的流程现在变成了:
如果您不介意加载,您可能会作弊 - 只需使用AJAX进行验证即可显示错误消息,并在正常提交时再次上传文件。
这完全是关于我们的限制。