отправка iframe обнуляет параметры запроса для родительской формы - PullRequest
2 голосов
/ 07 февраля 2012

Я использую скрытый iframe в моем jsp для загрузки файлов изображений. Код выглядит следующим образом:

  <form name="frm" method="POST" action="./servlet/newSubmit1">
      <div>
           Image:
          <input type="file" id="uploadImage" name="uploadImage" size="30" onchange="uploadFiles(); fileUpload(this.form,'./servlet/TempImageUploader','upload123')"/>
          <input type="hidden" id="UserName" value="TestValue"/>
      </div>
      <div id="upload123"></div>
      <ul>
          <li>  
               <input type="button" value="Upload" tabindex="6" onclick="uploadAttachedPhotos()"/>
          </li>
      </ul>
  </form>

Как вы можете видеть в коде, что при событии onchange кнопки обзора вызывают функции «uploadFiles ()» и «fileUpload». Функция uploadFiles использует DWR для загрузки файла во временный каталог на сервере и предварительного просмотра его на странице jsp, а функция fileUplaod создает скрытый iframe для вызова сервлета. который поддерживает все загруженные изображения на карте. У меня есть и другие данные на странице, которые могут быть обновлены пользователем. Например, здесь у меня есть поле «UserName», которое может иметь имя файла.

Функция javascript, которая создает скрытый iframe:

   function fileUpload(form, action_url, div_id) {
       // Create the iframe...
       var iframe = document.createElement("iframe");
       iframe.setAttribute("id", "upload_iframe");
       iframe.setAttribute("name", "upload_iframe");
       iframe.setAttribute("width", "0");
       iframe.setAttribute("height", "0");
       iframe.setAttribute("border", "0");
       iframe.setAttribute("style", "width: 0; height: 0; border: none;");

       // Add to document...
       form.parentNode.appendChild(iframe);
       window.frames['upload_iframe'].name = "upload_iframe";

       iframeId = document.getElementById("upload_iframe");

       // Add event...
       var eventHandler = function () {

            if (iframeId.detachEvent) iframeId.detachEvent("onload", eventHandler);
            else iframeId.removeEventListener("load", eventHandler, false);

           // Message from server...
           if (iframeId.contentDocument) {
               content = iframeId.contentDocument.body.innerHTML;
           } else if (iframeId.contentWindow) {
               content = iframeId.contentWindow.document.body.innerHTML;
           } else if (iframeId.document) {
               content = iframeId.document.body.innerHTML;
           }

           document.getElementById(div_id).innerHTML = content;

           // Del the iframe...
           setTimeout('iframeId.parentNode.removeChild(iframeId)', 250);
       }

       if (iframeId.addEventListener) iframeId.addEventListener("load", eventHandler, true);
       if (iframeId.attachEvent) iframeId.attachEvent("onload", eventHandler);

       // Set properties of form...
       form.setAttribute("target", "upload_iframe");
       form.setAttribute("action", action_url);
       form.setAttribute("method", "post");
       form.setAttribute("enctype", "multipart/form-data");
       form.setAttribute("encoding", "multipart/form-data");

       // Submit the form...
       document.forms[0].action = action_url;
       document.forms[0].submit();

       document.getElementById(div_id).innerHTML = "Uploading...";
 }

Теперь возникает вопрос, почему я получаю request.getParameter("UserName") NULL в сервлете действий родительской формы, когда я нажимаю кнопку загрузки?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...