2010-01-10 44 views
1

我正在構建一個集成了「FileCatalyst」Java FTP小程序和標準Drupal表單的Drupal模塊。我正在實現一個鉤子來在文件傳輸完成時提交表單。目前我正在用setTimeout()調用輪詢Applet,但如果它發生得太快,這種方法可能會錯過狀態的變化。如何使用Javascript中的java.util.Observable?

但是,FileCatalyst對象繼承自java.util.Observable - 因此顯然可以註冊applet的觀察者並獲取狀態更改的通知。我想知道如何實現這一點。

我可以使用Javascript中的document.FileCatalyst.addObserver(obj)函數來獲取發送到Javascript對象的這些狀態更改嗎?我傳遞給addObserver的是什麼?我如何構建觀察者?觀察員需要實施哪些方法才能接收狀態改變通知?

回答

0

我不能完全回答你的問題,但我讀過java.util.Observable存在一個陰暗面(請參閱Head First Design Patterns)。也就是說,Observable必須在類層次結構中工作。 java.beans中的PropertyListener會適合您的使用場景嗎?如果是這樣,有很多示例代碼展示瞭如何爲普通的舊JavaBean設置PropertyListeners。

0

每個Java applet也是一個Javascript對象,提供與Java對象相同的方法。因此你可以從Javascript調用addObserver()。作爲參數 傳遞的對象應該是一個Javascript對象,它提供與Observer類型所指定方法相同的方法(假設addObserver()接受Observer類型的單個參數)。

0

您需要使用fcupload.js中提供的重定向URL。例如:

var callurlaftertransfer =「javascript:submitForm()」;

然後你會有submitForm()函數調用像document.myform.submit();

希望有幫助!

Chris

+0

這是一個很好的答案,並且完美解決了輪詢問題。 (不知道爲什麼我不這樣做,首先!)我的問題的更大的要點與我已經實施的規範有關。 客戶端已經使用表單實現了一個頁面,並在窗體下面加上了FileCatalyst小程序。他們希望表單在文件成功上傳完成後提交,並且他們希望將文件列表與表單的內容一起發送。不幸的是,callurlaftertransfer方法不包含這些數據。 (請參閱下一條評論...) – 2010-01-12 17:09:57

+0

還有另一種FileCatalyst設置,「postURL」,其中包含上傳文件的列表,但它需要重新加載頁面並且會跳過表單提交。我希望獲得在任何頁面重新加載之前上傳的文件列表,因此可以將它與表單一起發送。 (將applet嵌入到iframe中是我考慮過的一個駭客解決方案。) 最後,我說服客戶改變規範。也就是說,將applet本身顯示爲步驟1,從postURL捕獲上傳的文件,然後將該表單顯示爲步驟2,然後將該postURL信息放在隱藏字段中。 – 2010-01-12 17:11:09