在 IBM 的 Portlet 中带有响应的文件上传
FIle Upload with response in Portlet For IBM
需要实现的目标:
我一直在尝试找到一种方法来上传文件并使用 Json 发送响应,如果它在 IBM Websphere Portlet 中使用 AJAX
成功的话
我是如何做到其中一部分的:
我能够使用 ActionURL 上传文件,但在 Action 中我无法找到从 ActionMapping
发送响应的方法
需要的方法:
我知道我们可以使用 ResourceMapping 发送响应,但我找不到在 Resouce Mapping
上上传文件的方法
Working Code For File Upload Which needs to be updated for Recieving Response in 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>
Code:For 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 Success Data
中返回响应
由于 portlet 两阶段呈现过程,我认为您尝试做的事情不会奏效。
两个建议要么使用旧的单个 portlet 刷新并发回 json 数据(尽管仍然无法更改该响应的数据类型)
或者使用与 portlet 打包在一起的单独的 servlet,并通过它发送它
我找到了解决方案。请参阅以下使用 Jar
的解决方案
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 ) {
}
需要实现的目标: 我一直在尝试找到一种方法来上传文件并使用 Json 发送响应,如果它在 IBM Websphere Portlet 中使用 AJAX
成功的话我是如何做到其中一部分的: 我能够使用 ActionURL 上传文件,但在 Action 中我无法找到从 ActionMapping
发送响应的方法需要的方法: 我知道我们可以使用 ResourceMapping 发送响应,但我找不到在 Resouce Mapping
上上传文件的方法Working Code For File Upload Which needs to be updated for Recieving Response in 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>
Code:For 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 Success Data
中返回响应由于 portlet 两阶段呈现过程,我认为您尝试做的事情不会奏效。
两个建议要么使用旧的单个 portlet 刷新并发回 json 数据(尽管仍然无法更改该响应的数据类型)
或者使用与 portlet 打包在一起的单独的 servlet,并通过它发送它
我找到了解决方案。请参阅以下使用 Jar
的解决方案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 ) {
}