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:


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;
        }
    }
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
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