CellBrowser ne s'affiche pas dans un Composite
Bonjour tout le monde,
Svp, j'ai besoin de votre aide. Après moult recherches, j'ai pu créer un CellBrowser, avec UiBinder, et l'alimenter dynamiquement à partir de la base de données. Tout fonctionne parfaitement à ce niveau. Toutefois, je n'arrive pas à l'afficher en l'attachant au composite avec la méthode InitWidget. J'ai essayé avec l'HTMLPanel tel qu'il est décrit dans les exemples de la documentation, mais ça ne fonctionne pas :/.
La seule manipulation qui permet de l'afficher c'est le RootPanel.get().add(cellBrowser). Or, j'ai d'autres widgets à afficher (un formulaire) via le UiBinder, et en combinant cette instruction avec InitWidget le tout s'affiche, mais les composants se mettent l'un sur l'autre :s.
Ce que je veux faire: afficher le CellBrowser sans utiliser le RootPanel, mais plutot les panels décrits dans le UiBinder (HTMLPanel ou autre).
Voici mon code:
Fichier du UiBinder:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| <!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:c='urn:import:com.google.gwt.user.cellview.client'>
<ui:style>
#errors {
color: red;
}
#success {
color: green;
}
.arrondie {
border: 1px solid black;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
background-color: #FFFFCC;
}
</ui:style>
<g:HorizontalPanel>
<g:HTMLPanel>
<table align="center" id="arrondie">
<tr>
<td colspan="3" align="center">
<div id="errors" align="center"></div>
<br />
<div id="success" align="center"></div>
</td>
</tr>
<tr>
<td>
<g:Label text="Unit's family:" />
</td>
<td colspan="2">
<g:TextBox width="15em" ui:field="familyName" />
</td>
</tr>
<tr>
<td>
<g:Label text="Unit:" />
</td>
<td>
<g:TextBox width="15em" ui:field="unitName" />
</td>
<td>
<g:Button ui:field="addUnit" text="Add unit" />
</td>
</tr>
<tr>
<td colspan="3" align="center">
<g:Button ui:field="submit" text="Submit" />
</td>
</tr>
</table>
</g:HTMLPanel>
<g:HTMLPanel>
<c:CellBrowser defaultColumnWidth='300' ui:field='cellBrowser' />
</g:HTMLPanel>
</g:HorizontalPanel>
</ui:UiBinder> |
le code de la vue:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| public class UniteViewImpl extends Composite implements UniteView {
private Presenter presenter;
private static UniteViewImplUiBinder uiBinder = GWT.create(UniteViewImplUiBinder.class);
private ListDataProvider<FamilleUniteProxy> dataProvider;
interface UniteViewImplUiBinder extends UiBinder<Widget, UniteViewImpl> {
}
@SuppressWarnings("deprecation")
public UniteViewImpl() {
dataProvider = new ListDataProvider<FamilleUniteProxy>(new ArrayList<FamilleUniteProxy>());
TreeViewModel model = new CustomTreeModel(dataProvider);
cellBrowser = new CellBrowser(model, null);
cellBrowser.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED);
cellBrowser.setHeight("200");
cellBrowser.setWidth("630");
RootPanel.get().add(cellBrowser); // If I delete this line, the cellBrowser is not displayed
initWidget(uiBinder.createAndBindUi(this));
}
@UiField
TextBox familyName;
@UiField
TextBox unitName;
@UiField
Button addUnit;
@UiField
Button submit;
@UiField(provided = true)
CellBrowser cellBrowser;
public UniteViewImpl(String firstName) {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void setPresenter(Presenter presenter) {
this.presenter = presenter;
}
public void updateProvider(List<FamilleUniteProxy> familles) {
dataProvider.setList(familles);
dataProvider.refresh();
}
@UiFactory
public CellBrowser getCellBrowser() {
return cellBrowser;
}
} |
La classe du TreeViewModel:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| class CustomTreeModel implements TreeViewModel {
private ListDataProvider<FamilleUniteProxy> dataProvider ;
public CustomTreeModel(ListDataProvider<FamilleUniteProxy> dataProvider) {
this.dataProvider = dataProvider;
}
public <T> NodeInfo<?> getNodeInfo(T value) {
if (value == null) {
Cell<FamilleUniteProxy> cell = new AbstractCell<FamilleUniteProxy>() {
@Override
public void render(Context context, FamilleUniteProxy value, SafeHtmlBuilder sb) {
sb.appendEscaped(value.getIntituleFamilleUnite());
}
};
return new DefaultNodeInfo<FamilleUniteProxy>(dataProvider, cell);
} else if (value instanceof FamilleUniteProxy) {
ListDataProvider<UniteProxy> dataProvider = new ListDataProvider<UniteProxy>(
((FamilleUniteProxy) value).getUnites());
Cell<UniteProxy> cell = new AbstractCell<UniteProxy>() {
@Override
public void render(Context context, UniteProxy value, SafeHtmlBuilder sb) {
if (value != null) {
sb.appendEscaped(value.getIntituleUnite());
}
}
};
return new DefaultNodeInfo<UniteProxy>(dataProvider, cell);
}
return null;
}
public boolean isLeaf(Object value) {
if (value instanceof UniteProxy) {
return true;
}
return false;
}
} |
J'espère que c'est clair, et je vous remercie d'avance :)