2009-06-03 31 views
3

我想在GWT中製作一個動態菜單,從XML文件中讀取它。該XML文件必須具有按鈕名稱和操作(將關聯的組合添加到水平面板中)。來自XML文件的GWT動態菜單。如何反映複合類?

爲了使行動,需要做類的反思,希望給了我很多問題。我已經嘗試了2種不同的解決方案,即客戶端和服務器端。在客戶端我已經嘗試過「gwt-ent」和「gwt reflection」庫,但是我有很多錯誤,並且需要設置什麼類纔會反映出來(我不想要,因爲我想要一個完整的動態菜單,而不是半動態)。在服務器端,我試圖返回菜單,但不能處理服務器端的客戶端小部件。所以我試圖進行反射並將實例返回給客戶端,但在服務器端不可能獲得客戶端類。

任何人都知道其他解決方案?我做錯了什麼? 我怎樣才能反映這個類,把複合材料放在水平面板上?

Thansk爲您提供幫助。 此致敬禮。

回答

1

一種方法是讓您的服務器端代碼創建一個「工廠」實例,該實例將在客戶端創建適當的Widget。這個「工廠」然後被序列化到客戶端(現在是它的一個DTO)。類似這樣的:

public interface WidgetFactory { 
    public Widget createWidget(); 
} 

public class MenuOptionDTO implements Serializable { 
    public String optionText; 
    public WidgetFactory widgetFactory; 
} 

public class WidgetOnMenu extends Composite { 
    ... 
    public static class Factory implements WidgetFactory, Serializable { 
     public Widget createWidget() { 
      return new WidgetOnMenu(); 
     } 
    } 
    ... 
} 

您可以在服務器端使用普通反射來創建WidgetFactory的實例。

<menu> 
    <option text="Option1" factory="com.acme.WidgetOnMenu.Factory"/> 
</menu> 

這是GWT Portlets framework使用的方法。