rich:fileUpload within GateIn portlet



环境:RichFaces 3.3.3 Final;小面1.1.15;JBoss portletbridge 2.1.0决赛;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月发布的,从那时起,我的应用程序的所有组成部分都有了新版本。

非常感谢您的帮助,或提供最新详细信息。

我不认为这是我自己问题的答案,但这对于评论来说太大了,我不想通过将其添加为编辑来影响答案。不管怎样,在一位同事的建议下,我有了一些变通办法。

正如我在问题中提到的,文件上传在一个独立的web应用程序中可以完美地工作,所以为什么不让portlet只指向那个web应用程序,而不是那个web应用呢。

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

DispatchPortlet和其他所有东西都在同一个项目中,并且只比条目HelloWorldPortlet复杂一步。只需覆盖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>

这些都是垃圾。人们几乎想知道我们为什么要麻烦使用portlet桥。不仅一切都正常,而且看起来也好一点,因为GateIn对CSS所做的一些时髦的事情并没有发生。

然而,我认为这是一个贫民区解决方案,并且正在寻找正确的方法,使其成为一个100%的portlet,并具有正常的文件上传功能。

我在Red Hat EPP的文档中发现不支持文件上传。也许下一个版本准备好了(支持JSF 2、Richfaces 4和Bridge 3),就可以了,但就目前而言,解决方案是唯一的选择。

最新更新