2010-04-13 4 views
4

Comment puis-je utiliser le même modèle d'interface utilisateur (fichier * .ui.xml) avec plusieurs objets Java provenant de Composite?GWT: utilise le même modèle d'interface utilisateur pour plusieurs pages?

Je dois construire plusieurs pages qui devraient afficher essentiellement la même information avec la même mise en page, mais sur une page certains champs seront modifiables, et sur une autre page d'autres champs seront modifiables. Je voudrais spécifier une seule fois la disposition dans ui.xml, et créer des comportements différents dans différentes classes * .java.

Eclipse me donne une erreur de syntaxe "FirstAppUI.ui.xml est manquant" sur

@UiTemplate("Template.ui.xml") 
public class FirstAppUI extends Composite { 
    interface FirstAppUIUiBinder extends 
      UiBinder<Widget, FirstAppUI> { 
    } 
} 

merci! jane Prusakova

Répondre

8

Je pense que vous devez placer l'annotation @UiTemplate sur le Binder, pas sur la Composite classe

Ce code fonctionne pour moi:

public class TestUiBinder extends Composite { 

    @UiTemplate("SomeTemplate.ui.xml") 
    interface TestUiBinderUiBinder extends UiBinder<Widget, TestUiBinder> {} 
    private static TestUiBinderUiBinder uiBinder = GWT.create(TestUiBinderUiBinder.class); 

    public TestUiBinder() { 
    initWidget(uiBinder.createAndBindUi(this)); 
    } 
} 

public class AnotherTestUiBinder extends Composite { 

    @UiTemplate("SomeTemplate.ui.xml") 
    interface TestUiBinderUiBinder extends UiBinder<Widget, AnotherTestUiBinder> {} 
    private static TestUiBinderUiBinder uiBinder = GWT.create(TestUiBinderUiBinder.class); 

    public AnotherTestUiBinder() { 
    initWidget(uiBinder.createAndBindUi(this)); 
    } 
} 

Cela semble un peu similaire à la solution pour applying different templates to the same widget.

+0

Jason a raison, l'annotation @UiTemplate va sur l'interface dérivée de UiBinder, pas sur la classe Composite contenant. Entre autres choses, cela permet d'avoir plus d'un modèle, et de déclarer un UiBinder différent pour chaque modèle, comme dans http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html#Apply_different_xml – aem

+0

La méthode initWidget insiste sur le paramètre de type Template, sinon donne une erreur de syntaxe: public FirstAppUI (final UiBinder lieur) { initWidget (uiBinder.createAndBindUi (this)); } Merci pour le lien, il semble pertinent, mais ne fonctionne malheureusement pas. – jprusakova

+0

Notez qu'il y a une erreur dans la page GWT liée ci-dessus, le corps du constructeur 'FirstAppUI' devrait être' initWidget (binder.createAndBindUi (this)) '. –