环境: RichFaces 3.3.3最终版;Facelets 1.1.15;JBoss portletbridge 2.1.0最终版;与JBoss as 5.1捆绑在一起的GateIn Portal3.1.0和内置的Mojarra JSF1.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社区论坛和一些JIRAs,似乎我的问题并不新鲜。我尝试了我找到的每一个建议,但没有一个对我有效。此外,这些帖子都不是比2010年1月更新的,而且我的应用程序的所有组成部分都有了新版本。
非常感谢您的帮助,或指向最新和详细信息的指针。
发布于 2011-07-17 04:30:18
我在Red Hat EPP的文档中找到不支持文件上传。也许当下一个版本准备好(支持JSF2、Richfaces 4和Bridge 3)时,它就会准备好了,但现在,变通方法是唯一的选择。
发布于 2011-05-27 02:08:04
我不认为这是对我自己问题的回答,但这对于评论来说太大了,我不想通过添加这篇编辑来影响答案。无论如何,在一位同事的建议下,我有一种变通的办法。
正如我在问题中提到的,文件上传在独立的web应用程序中工作得很好,所以为什么不让portlet只指向该web应用程序,而不是该web应用程序。
在portlet.xml中,将<portlet-class>从javax.portlet.faces.GenericFacesPortlet更改为您创建的java portlet,比如mypackage.DispatchPortlet。还要删除带有defaultViewId的<init-param>。
DispatchPortlet与其他所有内容都在同一个项目中,并且比entry 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做的一些时髦的事情没有发生。
然而,我认为这是一个隔离区的解决方案,我真的在寻找正确的方法来使它成为一个100%的portlet,并能正常上传文件。
https://stackoverflow.com/questions/6114787
复制相似问题