jquery ajax
投稿を入力タイプのファイルとテキスト付きの通常の入力タイプで行い、request.getParameter("element_name")
でサーブレットから取得しようとしていますが、Chromeのインスペクタを使用すると、私が送信しているFormDataのオブジェクトにファイルとテキストの値が含まれている場合、servlet
は何らかの理由でnull
というパラメータを読み取っています。入力タイプとファイルを持つFormDataオブジェクトを投稿するNullPointerException
この私が持っているフォームがされています(TICKET_IDは別のJSPから成功裏に戻っている)
<form id="upload-form" action="upload" enctype="multipart/form-data" method="post">
<input id="attach-btn" type="file" name="uploadedFile" style="display:none"/>
<input id="tick-id-upload" type="hidden" name="ID" value="<%=ticket_id%>" />
<input id="submit-form" type="button" style="display:none"/>
</form>
これはjqueryのAjaxのポストコールです:
// use to refresh section on submit of a form
$(document).on('click', '#submit-form', function()
{
var form_data = null;
if (drop === false)
{
// form data object with ticket id and file
form_data = new FormData($('#upload-form')[0]);
}
else
{
// append dropped file and value of id seperately
form_data = new FormData();
form_data.append('ID', $('#tick-id-upload').val());
form_data.append('uploadedFile', dropped_files);
}
$.ajax(
{
url: $('#upload-form').attr('action'),
type: 'POST',
async: true,
xhr: function() // custom XMLHttpRequest
{
myXhr = $.ajaxSettings.xhr();
if (myXhr.upload)
{ // check if upload property exists
myXhr.upload.addEventListener('progress', show_progress, false); // for handling the progress of the upload
}
return myXhr;
},
dataType: 'html', // the data type to be returned
success: function(response, status, xhr)
{
$('#progressbar').hide();
if (xhr.getResponseHeader('duplicate') === 'true')
{
// file is duplicate.. display dialog box
setTimeout(function()
{
$('#trigger-dialog').trigger('click');
}, 10);
}
else
{
// replace attachments section by section in response
$('#attachments').html($(response).find('#attachments').html());
execute_attach_datatable();
switch_to_view();
init_progress_bar();
override_section_height();
}
},
error: function(xhr, status, error)
{
alert(xhr.responseText);
},
data: form_data , // what data to pass
cache: false,
contentType: false, // type of data to be sent
processData: false
});
});
そして、これは何ですか私は自分のサーブレットのdoPostメソッドで行います:
int ticket_id = Integer.parseInt(request.getParameter("ID"));
この行は、Chromeのネットワークセクションからデータが送信されていますが、NullPointerException
を返しています。
入力タイプのテキストを送信せずにファイルをアップロードしても問題はありませんのでご注意ください。つまり、tick-id-upload
要素を持たない同じフォームがあり、同じjquery ajax
呼び出しを使用すると、ファイルが正常にアップロードされます。
何が起こっているのでしょうか?どうもありがとう!
ああ知らなかったというあなたの答えに感謝!ブログは本当に詳細なので、私はそれに簡単に従うことができます。もう一度ありがとう:) – Bernice
@Berniceいいえprobs :-)あなたが私の答えを見つけるなら、それを受け入れてください。答えを受け入れることで他の人が同じ問題に直面するのを助けます。 –
この解決策とは別に、JavaでFileItemクラスを使用して、要求を解析してファイルまたはアイテムの両方を取得できることに注意してください:)これを他のユーザーの別の回答として入れるべきかどうかはわかりません – Bernice