2

环境:RichFaces 3.3.3 Final;Facelets 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 月更新,从那时起,我的应用程序的所有组成部分都有新版本。

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

4

2 回答 2

0

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

于 2011-07-16T20:30:17.747 回答
0

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

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

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

DispatchPortlet 与其他所有项目都在同一个项目中,并且比入口 HelloWorld portlet 稍微复杂一点。只需覆盖 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 所做的一些时髦的事情并没有发生。

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

于 2011-05-26T18:08:04.293 回答