rich:GateIn portlet中的fileUpload

时间:2011-05-24 18:00:56

标签: jsf file-upload richfaces gatein

环境: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...
}

当作为独立Web应用程序部署时,结果如预期,组件显示,用户单击添加,浏览然后选择文件,文件添加到列表,用户单击上载按钮,以及“输入fileListener”行方法“显示在控制台上(以及其他发生的事情)。

GateIn上的结果:以上所有内容除了侦听器中的sysout和其他代码外。看来这种方法没有被调用。

我已经花了几天时间阅读JBoss社区论坛和一些JIRA,看来我的问题并不新鲜。我尝试了我找到的每个建议,但没有一个对我有效。此外,这些帖子都没有比2010年1月更新,而且我的应用程序的所有组成部分都有自那时以来的新版本。

非常感谢您的协助或指向最新详细信息的指针。

2 个答案:

答案 0 :(得分:0)

我不认为这是我自己的问题的答案,但这对于评论来说太大了,我不想通过将其添加为编辑来影响答案。无论如何,根据同事的建议,我有各种各样的解决办法。

正如我在问题中提到的,文件上传在一个独立的web应用程序中完美运行,所以为什么不让portlet仅仅指向那个web-app,而不是BE那个web-app。

在portlet.xml中,将<portlet-class>从javax.portlet.faces.GenericFacesPortlet更改为您创建的java portlet,例如mypackage.DispatchPortlet。同时使用defaultViewId删除<init-param>

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,文件上传功能正常。

答案 1 :(得分:0)

我在Red Hat EPP的文档中找到了不支持文件上传的功能。也许当下一个版本准备好(支持JSF 2,Richfaces 4和Bridge 3)时,它将是,但是现在,解决方案是唯一的选择。