Hi,
I've been struggling for days to display a list of objects in an editor using UIBinder.
But I can't figure out which class to use and even less how.
Here are some code snippets:
The UIBinder file
<!-- EventImplEditor.ui.xml file -->
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:m="urn:import:gwt.material.design.client.ui"
xmlns:ma="urn:import:gwt.material.design.addins.client"
xmlns:combobox="urn:import:gwt.material.design.addins.client.combobox"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.widget {
margin: 30px;
}
</ui:style>
<m:MaterialDialog ui:field="dialog" width="300px)">
<m:MaterialContainer ui:field="container" width="300px)" addStyleNames="{style.widget}">
<m:MaterialPanel>
<m:MaterialButton ui:field="exit" text="Exit"/>
</m:MaterialPanel>
<m:MaterialPanel>
<m:MaterialTextBox ui:field="name" label="Name" iconType="FACE" />
<m:MaterialTextBox ui:field="graphID" label="GraphID" iconType="FACE" />
</m:MaterialPanel>
<m:MaterialPanel ui:field="MaterialPanelCombo2">
</m:MaterialPanel>
<m:MaterialPanel ui:field="MaterialPanelCombo3">
</m:MaterialPanel>
<m:MaterialPanel ui:field="MaterialPanelCombo4">
</m:MaterialPanel>
<m:MaterialPanel ui:field="MaterialPanelCombo5">
</m:MaterialPanel>
<m:MaterialPanel ui:field="MaterialPanelCombo6">
</m:MaterialPanel>
<m:MaterialPanel>
</m:MaterialPanel>
<m:MaterialPanel>
<!-- Here I tried to put List box but no result -->
<g:ListBox ui:field="canBeusedBy" />
</m:MaterialPanel>
</m:MaterialContainer>
</m:MaterialDialog>
</ui:UiBinder>The Editor Java file
package com.lacen.gwt.spot.client.ui.mvp.editors.generated;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.editor.client.SimpleBeanEditorDriver;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.lacen.event.Event;
import gwt.material.design.client.ui.MaterialPanel;
import com.lacen.gwt.spot.client.ui.mvp.editors.ComboBoxEnum;
import gwt.material.design.client.ui.MaterialDialog;
import gwt.material.design.client.ui.MaterialTextBox;
import com.google.gwt.user.client.ui.ListBox;
import java.util.List;
import com.lacen.gwt.spot.client.ui.mvp.editors.ListValueSpot;
import com.lacen.users.Stakeholder;
import com.lacen.organisation.Action;
/**
* Create an editor to describe a event.
* @author Antonio
*/
public class EventEditor extends Composite implements Editor<Event> {
/** The Constant driver. */
// Editor driver
private static final EventDriver driver = GWT.create(EventDriver.class);
/**
* The Interface EventDriver.
*/
interface EventDriver extends SimpleBeanEditorDriver<Event, EventEditor> {
}
/** The Constant uiBinder. */
// UiBinder and fields
private static final EventEditorUiBinder uiBinder = GWT.create(EventEditorUiBinder.class);
/**
* The Interface EventEditorUiBinder.
*/
interface EventEditorUiBinder extends UiBinder<Widget, EventEditor> {
}
/** The dialog. */
@UiField
MaterialDialog dialog;
/** The name */
@UiField
MaterialTextBox name;
/** The graphID */
@UiField
MaterialTextBox graphID;
/** The eventStatus */
@UiField
MaterialPanel MaterialPanelCombo2;
ComboBoxEnum<com.lacen.event.HandlingProgress> eventStatus;
/** The relevance */
@UiField
MaterialPanel MaterialPanelCombo3;
ComboBoxEnum<com.lacen.event.Relevance> relevance;
/** The status */
@UiField
MaterialPanel MaterialPanelCombo4;
ComboBoxEnum<com.lacen.event.StatusEvent> status;
/** The detectability */
@UiField
MaterialPanel MaterialPanelCombo5;
ComboBoxEnum<com.lacen.event.Detectability> detectability;
/** The criticity */
@UiField
MaterialPanel MaterialPanelCombo6;
ComboBoxEnum<com.lacen.event.Criticality> criticity;
/** The canBeusedBy */
ListBox canBeusedBy;
/** The initial object (Event). */
private Event initialObject;
/**
* Instantiates a new Event editor.
*/
public EventEditor() {
initWidget(uiBinder.createAndBindUi(this)); //// Create the UI of the Editor.
eventStatus = new ComboBoxEnum<com.lacen.event.HandlingProgress>("eventStatus", com.lacen.event.HandlingProgress.VALUES);
MaterialPanelCombo2.add(eventStatus.getComboBox());
relevance = new ComboBoxEnum<com.lacen.event.Relevance>("relevance", com.lacen.event.Relevance.VALUES);
MaterialPanelCombo3.add(relevance.getComboBox());
status = new ComboBoxEnum<com.lacen.event.StatusEvent>("status", com.lacen.event.StatusEvent.VALUES);
MaterialPanelCombo4.add(status.getComboBox());
detectability = new ComboBoxEnum<com.lacen.event.Detectability>("detectability", com.lacen.event.Detectability.VALUES);
MaterialPanelCombo5.add(detectability.getComboBox());
criticity = new ComboBoxEnum<com.lacen.event.Criticality>("criticity", com.lacen.event.Criticality.VALUES);
MaterialPanelCombo6.add(criticity.getComboBox());
dialog.open(); //// Visualize the editor.
}
/**
* Initialize and fill in the editors fields with the Event properties.
*
* @param obj the Event.
*/
public void edit(Event obj) {
this.initialObject = obj;
driver.initialize(this); //// Initialize the driver
driver.edit(this.initialObject); //// Fill the editor with the object
}
/**
* Exit the editor closing the dialog.
*
* @param event the event
*/
@UiHandler("exit")
public void onExitSelect(ClickEvent event) {
dialog.close();
}
}In my Event object model, "
canBeusedBy" is the name of a
"Stakeholder" list that I want to display in the ListBox.
When I call my editor everything is displayed but not the list? Here after a copy of the editor displayed:
Do you have an idea, a specific example with a list of objects.
Thank you for your help.
Antonio