在發揮框架刷新頁面,是否有可能拒絕場拒絕形式沒有發揮2.0.3
filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));
無需重新加載頁面?
我有一個文件輸入欄,讓用戶選擇文件。在拒絕和重新加載時,文件被清除並顯示錯誤。我想,他們所選擇的文件在那裏
當前的行爲: 之前提交形式:
提交後(錯誤:文件都沒有了)
在發揮框架刷新頁面,是否有可能拒絕場拒絕形式沒有發揮2.0.3
filledForm.reject("myField", "You are missing files");
return badRequest(myform.render(filledForm));
無需重新加載頁面?
我有一個文件輸入欄,讓用戶選擇文件。在拒絕和重新加載時,文件被清除並顯示錯誤。我想,他們所選擇的文件在那裏
當前的行爲: 之前提交形式:
提交後(錯誤:文件都沒有了)
文件選擇輸入字段(即<input type="file" ... />
)與其他輸入字段不同 - 無法從服務器端預先填充值。如果可以的話,這將是一個巨大的安全漏洞(想想<input type="file" value="/etc/passwd" .. />
)。在服務器上,當您獲取提交的表單時,您沒有獲取上傳文件的完整路徑,只是文件的名稱和內容。
如果您確實需要保留文件輸入字段的值,則需要採用不同的路徑:通過Ajax提交表單(谷歌爲「ajax文件上傳」獲取某些技術和庫以幫助完成此操作) ,並使用Ajax響應來指示文件是否有效。
進一步澄清:與正常的HTML/HTTP POST方法(其中播放形成傭工使用),原來的頁面消失,服務器的響應是沒有連接到前一頁新的一頁。 Play表單助手將使用先前的值預填充此頁面上的輸入字段,但是如上所述,這對於文件輸入字段是不可能的。
這就是爲什麼有特殊目的的Javascript庫上傳文件。如果你的表單主要關心文件上傳,你應該看看這些。 (例如http://fineuploader.com)。在服務器端,Ajax查詢的目標將是一個新的Action,它只處理上傳的文件並返回成功/失敗消息,然後將顯示給用戶。
如果服務器能夠操縱文件字段的值,這將是一個主要的安全風險,因爲我們可以從用戶硬盤驅動器獲取任何文件。如果我們看一下你有兩個要求,
唯一的選擇是使用AJAX文件上傳。所以,你的流量現在變成:
如果您不介意加載,您可能會作弊一點 - 只需使用AJAX進行驗證即可顯示錯誤消息並讓文件在正常提交中再次上傳。
它是所有關於我們有限制的工作。
我明白。我的問題是如果有可能不必重新加載頁面就拒絕表單,這樣文件名就不會消失。 我可以說明使用javascript的簡單驗證,即檢查字段是否爲空 - 如果它們在提交之前拋出錯誤。但是,我有驗證文件格式的驗證,所以JS不會工作 – by0
對不起,你不可能做你想要的常規表單。我爲我的答案增加了一些解釋。 Javascript/Ajax方法將提交表單而不重新加載頁面。 –
謝謝。我會看看它! – by0