如何在Liferay 6.0.6中的JSF portlet中上传文件

时间:2012-01-08 17:05:18

标签: java jsf file-upload liferay portlet

我正在为Liferay 6.0.6(插件SDK 6.1)开发一个JSF 2.0 portlet,我需要文件上传功能。我尝试了以下不同的解决方案但没有成功:

任何有关如何操作的建议都会受到欢迎,也会破解或使用除JSF之外的其他技术。

4 个答案:

答案 0 :(得分:2)

为什么不使用标准HTML表单:

<form action="your_action_goes_here" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="file" />
    <input type="submit" name="submit" value="Submit" />
</form>

然后在您的Java代码中覆盖processAction方法(通常在扩展GenericPortlet或Liferay的MVCPortlet或JSPPortlet(用于5.2.3)的类中)然后您可以通过以下方式获取文件:

public void processAction(ActionRequest actionRequest, ActionResponse actionResponse) {
    UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(actionRequest);
    File file = (File) uploadRequest.getFile("file");
    // Do something with your file here
}

完成工作! :)这只是一个框架代码,你需要做一些异常处理,但你的IDE会有所帮助。

~~编辑~~~

可能使用其他可能的解决方案:

 HttpServletRequest req = FacesUtil.getRequest();
 UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(req);

我来自:http://ironicprogrammer.blogspot.com/2010/03/file-upload-in-jsf2.html

这有什么帮助吗?

答案 1 :(得分:0)

使用JSF标准h:inputFile标签(或任何流行的组件套件中的任何文件上传标签):

<h:form enctype="multipart/form-data">
    <h:inputFile value="#{bean.uploadedPart}" />
</h:form>

private Part uploadedPart;

public Part getUploadedPart() {
    return uploadedPart;
}

public void setUploadedPart(Part uploadedPart) {
    this.uploadedPart = uploadedPart;
}

答案 2 :(得分:-1)

PortletFacesBridge 2.0.1 bridge:inputFile 组件适用于Liferay 6.1 EE,适用于使用JSF 2.0的Portlet 2.0 portlet。因为我们使用的是Primefaces(v3.2),所以我也尝试使用它的uploadcomponent,但是doesn't work in portlets。正在研究future version of the PortletFacesBridge/Primefaces

对我有用的是:

XHTML:

<f:view xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:p="http://primefaces.org/ui"
    xmlns:bridge="http://portletfaces.org/bridge">

...
    <h:form enctype="multipart/form-data" method="POST">
        <bridge:inputFile id="icon" binding="#{bean.attachment}" />
    </h:form>
...

豆:

import org.portletfaces.bridge.component.UploadedFile

...

private transient HtmlInputFile attachment;

...

public HtmlInputFile getAttachment() {
    return attachment;
}

public void setAttachment(HtmlInputFile attachment) {
    this.attachment = attachment;
}

public String addApplication() {
    UploadedFile uploadedFile = attachment.getUploadedFile();
    ...
}

答案 3 :(得分:-1)

我在Liferay-6.1-EE上成功使用了Primefaces v3.2的文件上传组件和内置桥:inputFile和Liferay-Faces v3.1.0-RC1。仍然是候选版本,但相当稳定。 虽然没有使用Primefaces上传组件的高级功能。 感谢Neil Griffin先生和其他几位人员在使portF环境中的JSF 2.x工作方面做得非常出色。