PrimeFaces DataTable - besoin d'activer/désactiver des composants basés sur la sélection d'une ligne

Je suis en utilisant un PrimeFaces DataTable pour afficher les enregistrements (généré de façon aléatoire dans un sandbox de l'application). Je suis l'aide de la case à cocher de sélection version. La base DataTable fonctionne parfaitement, y compris les Supprimer et Annuler les boutons (dont la fonctionnalité n'est vraiment est disponible à partir de la boîte de dialogue de confirmation). Je suis en train d'ajouter des fonctionnalités à la DataTable, de sorte que lorsqu'une case est sélectionnée, les autres contrôles de la page sont activés ou désactivés en fonction de la sélection.

En d'autres termes, si aucune ligne n'est sélectionnée (pas de cases sont cochées) certains boutons et/ou des éléments de menu sont désactivées ou non rendu. Sélectionner une ou plusieurs lignes en cliquant sur la case à cocher activer ou de rendre les contrôles. J'ai essayé d'utiliser le construit en JavaScript gestionnaires d'événements, mais je ne peux pas faire ce travail.

Droit maintenant, ma page affiche un DataTable 5 colonnes: une case de sélection de colonne, Nom, prénom, Âge. J'ai fait quelque chose comme ce travail dans un autre carré de sable de mine à l'aide booléenne simple cases à cocher et de la mise à jour d'un booléen avec l'événement onclick. Malheureusement, il ne semble pas être quelque chose de semblable à ce DataTable ou si il ya je ne sais pas comment la mettre en œuvre.

Ma page index:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

    <body>

        <ui:composition template="./newTemplate.xhtml">


            <ui:define name="content">
            <h:form>

                <p:dataTable rowSelectListener="#{tableBean.onRowSelect}" var="data" value="#{tableBean.data}" paginator="true" rows="10"
                     selection="#{tableBean.selectedNames}">

                <f:facet name="header">
                    Customer List
                </f:facet>


                <p:column selectionMode="multiple" />

                <p:column headerText="Cust ID">
                    <h:outputText value="#{data.id}" />
                </p:column>

                <p:column headerText="First Name">
                    <h:outputText value="#{data.firstName}" />
                </p:column>

                <p:column headerText="Last Name">
                    <h:outputText value="#{data.lastName}" />
                </p:column>

                <p:column headerText="Age">
                    <h:outputText value="#{data.age}" />
                </p:column>

                <f:facet name="footer">                        
                    <p:commandButton update="deleteList" value="Delete" oncomplete="deleteDlg.show()" />
                </f:facet>

            </p:dataTable>

            <p:dialog header="Delete Selected Records" modal="true" widgetVar="deleteDlg"
                      >

                <h:outputText value="You are about to permanently delete records." /><br /><br />
                <h:outputText value="Are you sure you want to continue?" /><br /><br/>

                <h:commandButton value="CANCEL" action="#{tableBean.cancelDelete()}" /> <h:commandButton value="Delete" action="#{tableBean.deleteNames()}" />
            </p:dialog>

        </h:form>
            </ui:define>

        </ui:composition>

    </body>
</html>

Code de mon backing bean qui peuvent être pertinents:

    public void deleteNames()
    {
        for(Data person : selectedNames)
        {
            data.remove(person);
        }   
    }

    public void cancelDelete()
    {
        for(Data name : selectedNames)
            selectedNames = null;
    }

    public void onRowSelect(SelectEvent event)
    {
        if(selectedNames == null || selectedNames.length < 1)
            setDisable(true);
        else
            setDisable(false);
    }

public boolean isDisable() {
        if(selectedNames == null || selectedNames.length < 1)
            disable = true;
        else
            disable = false;
        return disable;
    }

    public void setDisable(boolean disable) {
        this.disable = disable;
    }
Ainsi, le travail autour de moi, je ai été en mesure d'arriver, c'est d'abandonner les cases à cocher. PrimeFaces a un "instantané" sélection de l'option où vous cliquez n'importe où sur la ligne de datatable pour le sélectionner. En utilisant cette option, avec le selectionMode="multiple", et de changer mes boutons de commande de la norme ACI de PrimeFaces boutons de commande, je suis en mesure de basculer et s'éteint lorsque les lignes sont sélectionné ou désélectionné. Je préfère encore utiliser les cases à cocher pour la sélection, mais cela ne semble pas possible avec un PrimeFaces datatable.

OriginalL'auteur Sean | 2010-12-29