环境: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月更新,而且我的应用程序的所有组成部分都有自那时以来的新版本。
非常感谢您的协助或指向最新详细信息的指针。
答案 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)时,它将是,但是现在,解决方案是唯一的选择。