2016-11-17 12 views
1

Что должно быть достигнуто: Я пытался найти способ, чтобы загрузить файл и отправить ответ с Json, если он успешен в IBM WebSphere Portlet с помощью AJAXFIle Загрузить с ответом в портлет IBM

Как я был в состоянии сделать его часть: я был в состоянии загрузить файл с помощью ActionURL, но в действии я не смог найти способ отправить ответ от ActionMapping нужен

подход: Я знаю е может отправить ответ, используя ResourceMapping, но я не могу найти способ, чтобы загрузить файл на Resouce Mapping

Рабочий код для загруженного файла, который должен быть обновлен для ПОЛУЧАТЬ ответ в AJAX

JSP

<form:form method="POST" 
modelAttribute="uploadForm" 
enctype="multipart/form-data"> 
    <input type="file" name="logo" id="logo"/> 
<button tabindex="2" type="submit" name="Next" value="Upload" id="Next" >Next</button> 
</form:form> 

Код: Для IBM Portlet

@ActionMapping(params="file=processUploadedFile") 
    public void processUploadedFileNew(@RequestParam("logo") MultipartFile file, 
      final ActionRequest request,final ActionResponse response) throws IOException { 
//I was able to Handle Code here 
     } 

Однако с вышеуказанным кодом я хочу изменить запрос на AJAX, и никакая перезагрузка страницы не требуется, поэтому мне нужно изменить действие на ресурс.

Примечание: Я известен в технике, где и можно отправить параметры из ActionMapping в RenderMapping и отправки данных в ModelAndView, но это нежелательно, как я хочу ответ обратно в AJAX успеха данных

ответ

0

Я смог найти решение. Пожалуйста, смотрите ниже решение с использованием фляге

import org.apache.commons.fileupload.FileUploadBase; 
import org.apache.commons.fileupload.servlet.ServletRequestContext; 

Code 
@ResourceMapping(value = "uploadfile") 
    public void processUploadedFile(final ResourceRequest request, final ResourceResponse response, final PortletRequest portletRequest){ 

HttpServletRequest originalHttpServletRequest = (HttpServletRequest) (com.ibm.ws.portletcontainer.portlet.PortletUtils.getHttpServletRequest(request)); 
     final boolean multipartContent = FileUploadBase.isMultipartContent(new ServletRequestContext(originalHttpServletRequest)); 

     if (multipartContent) { 
      file= createPEService.getResourceToBeUploaded(originalHttpServletRequest,file,bytes); 
     } 
} 

Jsp Файл:

<portlet:resourceURL id="uploadfile" 
    var="uploadfile" /> 

    <form class="testClass" enctype="multipart/form-data"> 
    </form> 

JS:

isMultipart = 'multipart/form-data' === referenceForm.enctype, 
var $referenceForm = $(e.currentTarget).parents('form'), 
         referenceForm = $referenceForm.get(0), 
$.ajax({ 
        type: 'POST', 
        url: ${uploadfile}, 
        processData: ! (isMultipart), 
        contentType: isMultipart ? false : 'application/x-www-form-urlencoded; charset=UTF-8', 
        data: isMultipart ? new FormData(referenceForm) : $referenceForm.serialize(), 
        cache: false 
       }).done(function(data) { 
       } 
0

I не думайте, что вы пытаетесь сделать, будет работать из-за процесса создания двухэтапных портлетов.

Два предложения либо использовать старое единое обновление портлета и отправить обратно данные JSon (до сих пор не может изменить тип данных на этом ответ, хотя)

или использовать отдельный сервлет вам пакет с портлета и отправить его через что