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 : Sélectionner tout - Visualiser dans une fenêtre à part
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:
La classe du TreeViewModel:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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![]()
Partager