簡體   English   中英

豐富:GateIn portlet 中的文件上傳

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM