2008-11-26 67 views
7

我的公司目前正在評估Java FAT客戶端的開發。它應該支持動態GUI,並且在服務器端擁有儘可能多的邏輯。因此,思想走到屏幕發送作爲XML的胖客戶端,它顯示給用戶,併發送類似「HTML表單」所輸入的數據回的結構,如:XML描述的Java GUI

<fields> 
    <field type="checkbox" name="active" checked="false" x="10" y="10" /> 
    <field type="textbox" name="username" value="dummy" x="10" y="30" /> 
    <field type="selection" name="group" selectedIndex="1" x="10" y="50"> 
    <data index="0">user</data> 
    <data index="1">admin</data> 
    </field> 
    <field type="button" name="ok" x="10" y="70" /> 
    <field type="button" name="cancel" x="10" y="90" /> 
</field> 

背景
發起人正在尋找一個數據錄入和審查應用程序,他們可以通過簡單地改變配置來適應他們的需求。因此,我們必須爲其管理員提供設計所謂的「屏幕」(即表格)並提供客戶端/服務器系統的可能性,以使他們能夠將它們分發給最終用戶。傳入數據(即由用戶輸入的數據)然後將被轉發到處理業務邏輯的已經存在的工作流引擎。

問題
有沒有人開發過類似的東西?你會建議哪些圖書館?任何親&缺點?非常感謝!

更新
您的輸入非常感謝,Thinlet看起來非常有前途,以及JavaFX - 我會考慮兩者。

+0

我覺得政治正確的術語是「厚」客戶端:) – Draemon 2008-11-26 15:11:50

+0

沒有,人們會混淆與中傷你的企業用戶; - } – ConcernedOfTunbridgeWells 2008-11-26 21:59:28

回答

2

當我最後找到這樣的事情時,兩個選項是ThinletApache Jelly

優點是您可以將應用程序的佈線和構造與行爲分開。我不確定他們中的任何一個做這件事的可行性,但我想可能是是翻譯成另一個工具包的一些功能,就像Lazlo可以轉換成AJAX和Flash一樣。

在我發現這些之前,我已經編寫了一個基於JHTMLEditor的類似工具包(當Echo是最前沿的,而Java 1.3是流血的邊緣)。它工作正常,但偵聽器與渲染器在同一個VM中運行。

這引出了@Draemon在客戶端/服務器環境中所做的一點,我不得不問這是否是解決更大問題的富有成效的方法。我在猜測你想要將很多CPU週期卸載到客戶端上?也許如果你多加一點,我們可以提出更多建議?這確實指向了一種方法,將您的應用程序作爲localhost網絡服務器部署在桌面上,並將頁面提供給本地瀏覽器。

如果您可以等待,我會,並等待JavaFX,因爲這將使構建小應用程序更具聲明性,並且還會減少渲染庫的初始下載。

2

「它應該支持動態GUI,並且在服務器端擁有儘可能多的邏輯。」

你所描述的是一個網絡應用程序。客戶端已經編寫(瀏覽器),XML(ish)格式是(X)HTML。

可以使用自己的XML格式和自己的客戶端重新創建此過程,但我不明白爲什麼這是必需的或合意的。

+0

問題是,我們必須訪問很難通過瀏覽器實現的客戶端設備(即發票打印機,讀卡器)。 – MrG 2008-11-26 15:18:49

1

已經完成了與SWT類似的工作,儘管這是將邏輯數據結構(在本例中爲應用程序表單模型)轉換爲GUI,而不是直接指定GUI。這允許我們根據客戶端屬性(PocketPC或Desktop)重構GUI,因爲數據模型是語義的而不是獨裁的佈局。

編寫XML解析器和生成器很簡單。編寫一些從模型生成接口的過程並不那麼簡單,因爲您需要存儲GUI元素和它們相關的模型字段之間的關係,以便在更改時更新它們,而不是每個硬編碼的監聽器GUI元素。

1

對於包括Java在內的各種語言,有很多基於XUL的工具包。 我認爲Thinlet爲Java做了一個非常簡單的XUL,但應該有其他的。

1

基本上,您正在向客戶端發送序列化表單,並序列化結果數據。這可以通過Java序列化,即RMI來完成,但是防火牆等等可能使RMI在互聯網上的使用複雜化。

如果你想在電匯上使用XML over HTTP,你可以看看java.beans.XMLEncoder。 XMLEncoder面向UI組件的序列化,但它也可以將POJO序列化。這些實質上是在FAT客戶端中用戶輸入填充的模型對象。