rich: fileUpload в портлете GateIn - PullRequest
2 голосов
/ 24 мая 2011

Среда: RichFaces 3.3.3 Final;Facelets 1.1.15;JBoss portletbridge 2.1.0 Final;GateIn Portal 3.1.0 в комплекте с JBoss AS 5.1 и встроенным Mojarra JSF 1.2.

Некоторые фрагменты кода: filepage.xhtml:

 <a4j:form id="fileForm">
      <rich:fileUpload fileUploadListener="#{testBean.fileListener}"
        acceptedTypes="txt" maxFilesQuantity="1" />
      <!-- etc. -->
 </a4j:form>

TestBean.java:

 public void fileListener(UploadEvent e) throws IOException {
    System.out.println("Entering the fileListener Method");
    UploadItem item = e.getUploadItem();
    File file = item.getFile();
            // etc...
}

Результат при развертывании в виде автономного веб-приложения соответствует ожидаемому, компонент отображается, пользователь нажимает добавить, просматривает, затем выбирает файл, файл добавляется в список, пользователь нажимает кнопку загрузки и строку«Ввод метода fileListener» отображается на консоли (наряду с другими событиями).

Результат на GateIn: все вышеперечисленное, КРОМЕ sysout и другого кода в слушателе.Похоже, этот метод не вызывается.

Я уже провел несколько дней, читая форумы сообщества JBoss и несколько JIRA, и, похоже, моя проблема не нова.Я попробовал каждое из найденных предложений, но ни одно из них не сработало.Кроме того, ни одна из этих публикаций не была более новой, чем январь 2010 года, и с тех пор все составные части моего приложения имели новые версии.

Ваша помощь или указатель на актуальную и подробную информацию, с благодарностью.

Ответы [ 2 ]

0 голосов
/ 17 июля 2011

В документации к Red Hat EPP я обнаружил, что загрузка файлов не поддерживается. Возможно, когда будет готова следующая версия (для поддержки JSF 2, Richfaces 4 и Bridge 3), тогда это будет, но на данный момент обходной путь - единственный выбор.

0 голосов
/ 26 мая 2011

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

Как я уже упоминал в этом вопросе, загрузка файлов прекрасно работает в автономном веб-приложении, так почему бы не сделать портлет просто УКАЗАТЬ НА это веб-приложение, а не БЫТЬ этим веб-приложением.

В 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% с работающей загрузкой файлов.

...