bonjour tout le monde,
j'ai tester l'exemple de richfaces <rich:extendedDataTable> avec selection de ligne ca marche parfaitement


JSF:
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
64
65
66
67
68
69
70
71
72
73
 <h:panelGrid columns="2">
        <h:form>
            <fieldset style="margin-bottom: 10px;">
                <legend>
                    <h:outputText value="Selection Mode " />
                </legend>
                <h:selectOneRadio value="#{extTableSelectionBean.selectionMode}">
                    <f:selectItem itemLabel="Single" itemValue="single" />
                    <f:selectItem itemLabel="Multiple" itemValue="multiple" />
                    <f:selectItem itemLabel="Multiple Keyboard-free" itemValue="multipleKeyboardFree" />
                    <a4j:ajax render="table, res" />
                </h:selectOneRadio>
            </fieldset>
            <rich:extendedDataTable value="#{extTableSelectionBean.inventoryItems}" var="car"
                selection="#{extTableSelectionBean.selection}" id="table" frozenColumns="2" style="height:300px; width:500px;"
                selectionMode="#{extTableSelectionBean.selectionMode}">
                <a4j:ajax execute="@form" event="selectionchange" listener="#{extTableSelectionBean.selectionListener}"
                    render=":res" />
                <f:facet name="header">
                    <h:outputText value="Cars marketplace" />
                </f:facet>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="vendor" />
                    </f:facet>
                    <h:outputText value="#{car.vendor}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="Model" />
                    </f:facet>
                    <h:outputText value="#{car.model}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="Price" />
                    </f:facet>
                    <h:outputText value="#{car.price}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="Mileage" />
                    </f:facet>
                    <h:outputText value="#{car.mileage}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="VIN Code" />
                    </f:facet>
                    <h:outputText value="#{car.vin}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="Items stock" />
                    </f:facet>
                    <h:outputText value="#{car.stock}" />
                </rich:column>
                <rich:column>
                    <f:facet name="header">
                        <h:outputText value="Days Live" />
                    </f:facet>
                    <h:outputText value="#{car.daysLive}" />
                </rich:column>
            </rich:extendedDataTable>
        </h:form>
        <a4j:outputPanel id="res">
            <rich:panel header="Selected Rows:" rendered="#{not empty extTableSelectionBean.selectionItems}">
                <rich:list type="unordered" value="#{extTableSelectionBean.selectionItems}" var="sel">
                    <h:outputText value="#{sel.vendor} - #{sel.model} - #{sel.price}" />
                </rich:list>
            </rich:panel>
        </a4j:outputPanel>
    </h:panelGrid>
Bean
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
@ManagedBean
@ViewScoped
public class ExtTableSelectionBean implements Serializable {
    private String selectionMode = "multiple";
    private Collection<Object> selection;
    @ManagedProperty(value = "#{carsBean.allInventoryItems}")
    private List<InventoryItem> inventoryItems;
    private List<InventoryItem> selectionItems = new ArrayList<InventoryItem>();
 
    public void selectionListener(AjaxBehaviorEvent event) {
        UIExtendedDataTable dataTable = (UIExtendedDataTable) event.getComponent();
        Object originalKey = dataTable.getRowKey();
        selectionItems.clear();
        for (Object selectionKey : selection) {
            dataTable.setRowKey(selectionKey);
            if (dataTable.isRowAvailable()) {
                selectionItems.add((InventoryItem) dataTable.getRowData());
            }
        }
        dataTable.setRowKey(originalKey);
    }
 
    public Collection<Object> getSelection() {
        return selection;
    }
 
    public void setSelection(Collection<Object> selection) {
        this.selection = selection;
    }
 
    public List<InventoryItem> getInventoryItems() {
        return inventoryItems;
    }
 
    public void setInventoryItems(List<InventoryItem> inventoryItems) {
        this.inventoryItems = inventoryItems;
    }
 
    public InventoryItem getSelectionItem() {
        if (selectionItems == null || selectionItems.isEmpty()) {
            return null;
        }
        return selectionItems.get(0);
    }
 
    public List<InventoryItem> getSelectionItems() {
        return selectionItems;
    }
 
    public void setSelectionItems(List<InventoryItem> selectionItems) {
        this.selectionItems = selectionItems;
    }
 
    public String getSelectionMode() {
        return selectionMode;
    }
 
    public void setSelectionMode(String selectionMode) {
        this.selectionMode = selectionMode;
    }
}
mon problem maintenant ,je veut que au debut du chargement de la page il selectionne une ligne spécifique .
j'ai pu trouvé une solution pour qu'il demare une methode avant la sélection,il suffit juste d'ajouter dans <rich:extendedDataTable> l'attribut onbeforeselectionchange="".
j'essayer de selectionner avec dataTable.setRowKey(); dans une methode que j'ai applé dans onbeforeselectionchange"" mais j'ai toujours une exception Nullpointer