J'essaie de créer une page très similaire à la page de création de formulaire Google.
P>
C'est ainsi que je tente de le modéliser à l'aide du cadre GWT MVP (lieux et activités) et éditeurs. P>
CreativeEformactivity strong> (Activité et présentateur) p> CreateEformviewimpl a les sous-éditeurs suivants: P> questionnaire strong> Editeur éditeur pour chaque type de questions: P> textesQuestionEditor strong> p> ParagraphetextQuestionEditor Fort> P> ListeQueStionAditor strong> ScalequestionAditor strong> p> gridquestioneditor strong> p> L'éditeur de questions p> Editeur de données de base p>
Questions spécifiques: H2>
implémentation basée sur la réponse h2>
public class BooleanQuestionDataEditor extends Composite implements QuestionBaseDataEditor {
interface Binder extends UiBinder<Widget, BooleanQuestionDataEditor> {}
@Path("prompt")
@UiField
TextBox prompt = new TextBox();
public QuestionNumberDataEditor() {
initWidget(GWT.<Binder> create(Binder.class).createAndBindUi(this));
}
@Override
public void setRequestContext(final RequestContext ctx) {
}
}
4 Réponses :
Fondamentalement, vous voulez un Si les informations requises pour les différents types de questions sont fondamentalement orthogonales, alors multiples Une approche différente, qui permettra de mieux utiliser une implémentation personnalisée d'un fwiw, compositeeditor code> pour gérer les cas où des objets sont ajoutés de manière dynamique ou supprimée de la hiérarchie de l'éditeur. Le
indiqué par
et
facultatiffieditor CODE> Adaptateurs Implémente
CompositeAditor code>. P>
facultatiffieditor CODE> pourrait être utilisé avec différents champs, un pour chaque type de questions. Cela fonctionnera lorsque vous n'avez que quelques types de questions, mais ne feront pas beaucoup d'échelle à l'avenir. P>
compositeAditor + LeafValueeditor code> qui gère un "code> PolyMorphe
QuestionData code> Hiérarchie de type. L'élément UI de type déroulant deviendrait un détail de mise en œuvre du
compositeAditor code>. Lorsqu'un type de question est sélectionné, l'éditeur appellera
EditorChain.attach () code> avec une instance d'un
QuestionData code> Sous-type et le sous-éditeur spécifique de type. La nouvelle instance CODE> QUESTMEDATA CODE> doit être conservée pour mettre en œuvre
LeafValueeditor.getvalue () code>. La mise en œuvre de
compositeeditor.setvalue () code> crée simplement le sous-éditeur et les appels spécifiques au type
éditeur.attach () code>. P>.
facultatiffietoritor code> peut être utilisé avec
répertoriétor code> ou tout autre type d'éditeur. p>
Merci pour la réponse! Cette approche semble beaucoup plus propre. Je vais essayer d'essayer de poster mes résultats aujourd'hui.
Que devrait être retourné pour compositeeditor.CreateedortorTraversal ()?
La seule chose qui appelle créeeeDeTorTorTraversal () code> est le
pathcollector code> utilisé par
requierFactoryeditordRiver.getpaths () code>. Ma recommandation consiste à toujours retourner une instance triviale de votre éditeur de type de questions et sachez que vous devrez peut-être modifier la valeur renvoyée par
getPaths () code>.
À chargez i> Data pour un sous-type spécifique de QuestionData Code>, le chemin spécifique au sous-type doit être ajouté à la requête
.with () code>, mais le < Code> QuestionData Code> Le type n'est pas saisi tant que les données sont chargées. Donc, si tous les chemins possibles des questionnaires-sous-types peuvent être ajoutés lors du chargement de données?
Ajout de tous les sous-chemins possibles dans le avec () code> appelera rien sur le serveur; Il ignorera les chemins qui n'existent pas dans un objet. Cela ressemble à une demande de fonctionnalité permettant à un
avec ("foo. *") Code> Syntaxe pour éviter la nécessité de spécifier des champs sur les cas de retour polymorphe.
Merci! Demande de fonctionnalité créée code.google.com/p/google -Web-Toolkit / Problèmes / Détails? ID = 6698
Hey Bob, je l'ai presque travaillé, voyez-vous ce que je fais mal?
Le générateur GWT ne prend pas en charge les types d'éditeur polymorphes (je pensais que cela avait été fait). Au lieu de cela, vous pouvez créer une interface SimpleBeaneDitordRiver distincte pour chaque sous-type d'éditeur mappé et gérer le cycle EDIT () du sous-pilote () basé sur les appels à l'éditeur de fan de sortie. Dépôt d'un numéro séparé 6719 pour le polymorphisme de l'éditeur.
@Bobv J'aimerais avoir vu ce commentaire avant ma réponse ci-dessous, mais il a été plié par Stackoverflow;) Merci d'avoir déposé le problème.
En ce qui concerne votre question Pourquoi les données spécifiques au sous-type ne sont pas affichées ni rinçues:
Mon scénario est un peu différent mais j'ai fait l'observation suivante: p>
Editeur GWT Datailding ne fonctionne pas comme on le ferait Attendez-vous avec des éditeurs abstraits dans la hiérarchie de l'éditeur. Le sous-assistateur déclaré dans votre questionnaire est de type Questrebasedaeditor et c'est un type entièrement abstrait (une interface). Lorsque vous recherchez des champs / sous-éditeurs pour remplir avec Data / Flush GWT prend tous les champs déclarés dans ce type. Étant donné que le questionnaire n'a aucun sous-éditeur n'a déclaré que rien n'est affiché / rincé. Du débogage que j'ai découvert que cela se produit dû à GWT à l'aide d'un Editordélégate généré pour ce type d'abstrait plutôt que de EditionDélégate pour le sous-type de béton présent à ce moment-là. P>
Dans mon cas, tous les sous-éditeurs concrets avaient la même chose Types de rédacteurs de la valeur de la feuille (j'avais deux éditeurs de béton différents à afficher et à éditer le même type de haricot) afin que je puisse faire quelque chose comme ça pour contourner cette limitation: p> Malheureusement, cette approche ne convient pas lorsque les sous -iteurs concrets ont des valeurs différentes dans votre Structure de haricots à éditer: ( P> Je pense que c'est un bogue du cadre des éditeurs GWT génération de code GWT, qui ne peut être résolu que par l'équipe de développement GWT. P> P>
Une addition: peut-être que cela fonctionnera également pour les sous-politiseurs qui éditeront différents types de haricots, mais la classe de base abstraite / interface doit avoir des champs de rédaction / getters pour toutes les propriétés en question de tous les types qui ne quittent pas ces null qui ne sont pas utilisés par le béton actuel. Sous-classe de l'éditeur.
Avez-vous essayé d'utiliser différentes annotations @Path sur vos sous-éditeurs? Je préfère définitivement l'approche consistant à laisser les éditeurs GWT se lier aux interfaces et aux méthodes (au lieu de classes et de champs)
Nous avons mis en place une approche similaire (voir réponse acceptée) et cela fonctionne pour nous comme ceci.
Le pilote étant initialement inconscient des simples chemins de rédaction pouvant être utilisés par des sous-éditeurs, chaque sous-éditeur contient son propre pilote:
@Path("") DynamicEditor<ProductProxy> productDetailsEditor; ... public void setProductType(ProductType type){ if (ProductType.VIRTUAL==type){ productDetailsEditor = DynamicEditor.of(new VirtualProductEditor()); } else if (ProductType.PHYSICAL==type){ productDetailsEditor = DynamicEditor.of(new PhysicalProductEditor()); } }
Votre approche est définitivement valable. Nous avons fait quelque chose de similaire à partir de nos éditeurs - créant un nouveau pilote pour chaque sous-éditeur et les lier ensemble. Je n'aime plus cette approche parce que je suis tombé amoureux des visiteurs de l'éditeur et le pouvoir qu'ils apportent. Par exemple; détection sale. Au lieu de cela, je pense que vous pouvez accomplir la même tâche en utilisant un ensemble d'éditeurs composites.
Une bonne mise en œuvre de la suggestion dans Ce commentaire
n'est-ce pas le problème fondamental que la liaison se passe à la compilation de la compilation que ne se lierra que pour les interrogations afin de ne pas avoir de liaisons spécifiques à sous-type? Le compositeAditor Javadoc dit "une interface qui indique qu'un éditeur donné est composé d'un nombre inconnu de sous-éditeurs tout le même type" afin que cela règle cette utilisation? P>
À mon travail actuel, je pousse tout à fait d'éviter le polymorphisme car le SGBDM ne le supporte pas non plus. Malheureusement, nous en avons pour le moment, donc j'éprime une classe d'enveloppe factice qui expose tous les sous-types avec des getters spécifiques afin que le compilateur ait quelque chose à travailler. Pas jolie cependant. p>
Avez-vous vu ce message: http://markmail.org/message/u2cff3mfbiboeejr Cela semble les droites. P>
Je suis un peu inquiet pour le code de code cependant. P>
espère que cela fait une sorte de sens! p>
Vous ajoutez essentiellement deux éditeurs à la chaîne de l'éditeur pour la même valeur. Premièrement, l'éditeur principal est joint, puis le sous-éditeur. Avez-vous essayé de détacher l'éditeur principal avant de joindre le sous-éditeur?