Я не считаю это ответом на свой вопрос, но он слишком велик для комментария, и я не хочу влиять на ответы, добавив его в качестве редактирования. Во всяком случае, по предложению коллеги у меня есть своего рода обходной путь.
Как я уже упоминал в этом вопросе, загрузка файлов прекрасно работает в автономном веб-приложении, так почему бы не сделать портлет просто УКАЗАТЬ НА это веб-приложение, а не БЫТЬ этим веб-приложением.
В portlet.xml измените <portlet-class>
с javax.portlet.faces.GenericFacesPortlet на созданный вами java-портлет, скажем mypackage.DispatchPortlet. Также удалите <init-param>
с defaultViewId.
DispatchPortlet находится в том же проекте, что и все остальное, и едва ли на шаг сложнее, чем входной портлет HelloWorld. Просто переопределите doView и добавьте эти четыре маленькие строки:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(HTML_CONTENT);
out.close();
HTML_CONTENT - это статическая строковая переменная, которая выглядит примерно так:
<iframe src="url to your app" height="400" width="600">no iframes</iframe>
Это буквально все, что нужно. Кто-то почти задается вопросом, зачем нам нужен мост с портлетами. Мало того, что все работает, но и выглядит немного лучше, потому что некоторые интересные вещи, которые GateIn делает с CSS, не случаются.
Однако я считаю это гетто-решением и действительно ищу правильный способ сделать этот портлет 100% с работающей загрузкой файлов.