Как загрузить файл в портлет JSF в Liferay 6.0.6 - PullRequest
1 голос
/ 08 января 2012

Я разрабатываю портлет JSF 2.0 для Liferay 6.0.6 (Plugins SDK 6.1) и мне нужна функция загрузки файлов.Я безуспешно пробовал следующие разные решения:

Любое предложение о том, как это сделать, приветствуется, также может быть взломано или с использованием технологий, отличных от JSF.

Ответы [ 4 ]

2 голосов
/ 09 января 2012

Почему бы не использовать стандартную форму 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's 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

Это какая-то помощь?

0 голосов
/ 16 января 2019

Используйте стандарт 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;
}
0 голосов
/ 07 июня 2012

Я успешно использовал компонент загрузки файлов Primefaces v3.2 и встроенный мост: inputFile с Liferay-Faces v3.1.0-RC1 на Liferay-6.1-EE. Все еще кандидат на релиз, но довольно стабильный. Хотя не использовал расширенные возможности компонента загрузки Primefaces. Спасибо г-ну Нилу Гриффину и нескольким другим за отличную работу по созданию JSF 2.x в среде портлетов.

0 голосов
/ 27 марта 2012

Мост : компонент inputFile компонента PortletFacesBridge 2.0.1 у меня работает на Liferay 6.1 EE для портлета Portlet 2.0 с использованием JSF 2.0.Поскольку мы используем Primefaces (v3.2), я также попытался использовать uploadcomponent , но это пока не работает в портлетах .Он работает над будущей версией 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>
...

bean:

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();
    ...
}
...