rich:fileUpload在GateIn portlet内

问题描述

| 环境:RichFaces 3.3.3 Final; Facelets 1.1.15; JBoss portletbridge 2.1.0最终版;与JBoss AS 5.1和内置的Mojarra JSF 1.2捆绑在一起的GateIn Portal 3.1.0。 一些代码片段: 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...
}
部署为独立Web应用程序时的结果与预期的一样,显示该组件,用户单击添加,浏览然后选择一个文件,将文件添加到列表中,用户单击上载按钮,并在行“ Entering the fileListener Method \” ”会显示在控制台上(以及其他发生的情况)。 GateIn上的结果:以上所有内容都超出了sysout和侦听器中的其他代码。似乎没有调用方法。 我已经花了几天时间浏览JBoss社区论坛和一些JIRA,看来我的问题并不新鲜。我尝试了所有发现的建议,但没有一个我有用。此外,这些帖子都没有比2010年1月更新的信息,此后,我的应用程序的所有组成部分都具有新版本。 非常感谢您的协助,或提供最新和详细信息的指南。     

解决方法

我不认为这是我自己的问题的答案,但这对于评论来说太大了,我不想通过将其添加为编辑来影响答案。无论如何,在同事的建议下,我有一些解决方法。 正如我在问题中提到的那样,文件上载在独立的Web应用程序中运行完美,因此为什么不使Portlet仅指向该Web应用程序,而不是成为该Web应用程序。 在portlet.xml中,将“ 2”从javax.portlet.faces.GenericFacesPortlet更改为您创建的Java Portlet,例如mypackage.DispatchPortlet。还要删除带有defaultViewId \的“ 3”。 DispatchPortlet与其他所有项目都在同一个项目中,仅比条目HelloWorld portlet复杂得多。只需覆盖doView并添加以下四行代码:
 response.setContentType(\"text/html\");
 PrintWriter out = response.getWriter();
 out.println(HTML_CONTENT);
 out.close();
HTML_CONTENT是一个静态String变量,看起来像:
 <iframe src=\"url to your app\" height=\"400\" width=\"600\">no iframes</iframe>
这几乎就是全部。几乎有人怀疑我们为什么要打个Portlet桥。不仅一切都能正常工作,而且看起来也更好一些,因为GateIn对CSS所做的一些时髦事情没有发生。 但是,我认为这是一个贫民窟解决方案,并且我确实在寻找正确的方法来使其成为100%portlet,并具有正常的文件上传功能。     ,我在Red Hat EPP文档中找到了不支持文件上传的信息。也许当下一个版本准备就绪(支持JSF 2,Richfaces 4和Bridge 3)时,它就可以了,但是就目前而言,解决方法是唯一的选择。