Ich verwende eine PrimeFaces DataTable, um Datensätze anzuzeigen (zufällig in einer Sandbox-Anwendung generiert). Ich verwende die Checkbox-Auswahlversion. Die grundlegende DataTable funktioniert perfekt, einschließlich der Schaltflächen Löschen und Abbrechen (welche Funktionalität nur im Bestätigungsdialog verfügbar ist). Ich versuche, der DataTable Funktionalität hinzuzufügen, sodass bei Auswahl eines Kontrollkästchens andere Steuerelemente auf der Seite basierend auf der Auswahl aktiviert oder deaktiviert werden.PrimeFaces DataTable - Aktivieren/Deaktivieren von Komponenten basierend auf Zeilenauswahl
Mit anderen Worten, wenn keine Zeilen ausgewählt sind (keine Kontrollkästchen aktiviert sind), sind bestimmte Schaltflächen und/oder Menüelemente deaktiviert oder nicht gerendert. Wenn Sie eine oder mehrere Zeilen auswählen, indem Sie auf das Kontrollkästchen klicken, aktivieren oder rendern Sie die Steuerelemente. Ich habe versucht, die eingebauten JavaScript-Event-Handler zu verwenden, aber ich kann das nicht funktionieren.
Im Moment zeigt meine Seite eine DataTable 5 Spalten: eine Checkbox Auswahlspalte, Vorname, Nachname, Alter. Ich habe so etwas in einer anderen Sandbox von mir gemacht, indem ich einfache boolesche Checkboxen benutzt habe und einen Boolean mit dem onclick Event aktualisiert habe. Leider scheint in dieser DataTable nichts Ähnliches zu sein - oder wenn ich nicht weiß, wie ich es implementieren soll.
Meine Index-Seite:
<?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 von meinem Backing Bean, die relevant sein können:
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;
}
Nun, die einzige Arbeit, um ich habe in der Lage zu kommen mit ist das Kontrollkästchen zu verlassen. PrimeFaces verfügt über eine "sofortige Auswahl" -Option, bei der Sie auf eine beliebige Stelle in der Datentabelle klicken, um sie auszuwählen. Wenn ich diese Option mit selectionMode = "multiple" benutze und meine commandButtons von standard JSF in PrimeFaces commandButtons ändere, kann ich sie ein- und ausschalten, wenn Zeilen ausgewählt oder nicht ausgewählt sind. Ich würde immer noch die Kontrollkästchen zur Auswahl verwenden, aber das scheint mit einer PrimeFaces-Datentabelle nicht möglich. – Sean