[英]rich:fileUpload within GateIn portlet
環境: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 應用程序時的結果與預期的一樣,組件顯示,用戶單擊添加,瀏覽然后選擇文件,文件添加到列表中,用戶單擊上傳按鈕,並顯示“輸入文件偵聽器方法”行在控制台上(以及發生的其他事情)。
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 與其他所有項目都在同一個項目中,並且比入口 HelloWorld portlet 稍微復雜一點。 只需覆蓋 doView 並添加以下四行:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(HTML_CONTENT);
out.close();
HTML_CONTENT 是一個 static 字符串變量,看起來有點像:
<iframe src="url to your app" height="400" width="600">no iframes</iframe>
這就是它所需要的一切。 幾乎有人想知道為什么我們要費心擁有一個 portlet 橋接器。 不僅一切正常,而且看起來也好一些,因為 GateIn 對 CSS 所做的一些時髦的事情沒有發生。
然而,我認為這是一個 ghetto 解決方案,並且我真的在尋找正確的方法來使它成為 100% 的 portlet,並具有功能文件上傳功能。
我在 Red Hat EPP 的文檔中找到不支持文件上傳。 或許當下一個版本准備就緒(支持 JSF 2、Richfaces 4 和 Bridge 3)時,它就會出現,但目前,解決方法是唯一的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.