Bedingte Zellenbearbeitung in der Datentabelle PrimeFaces

8

Ich möchte dem Benutzer erlauben, Zellen in der Datentabelle nur dann zu bearbeiten, wenn eine Bedingung erfüllt ist.

Zuerst habe ich <choose> versucht, dies zu erreichen:

%Vor%

aber es funktioniert nicht. Ein anderer Ansatz ist die Verwendung von rendered attribute:

%Vor%

das funktioniert gut - Benutzer können nur erlaubte Zellen bearbeiten.

Aber selbst wenn die Zelle nicht editierbar ist, hat sie immer noch ui-cell-editing class und sieht für den Benutzer wie eine editierbare Zelle aus.

Was ist eine korrekte Methode zum Anwenden der Bedingung auf die Zellenbearbeitung?

Danke!

    
Meta 20.08.2013, 09:59
quelle

1 Antwort

6

Um die Lektion von JSTL richtig zu lernen, ist es aus dem in der folgenden Antwort erklärten Grund fehlgeschlagen: JSTL in JSF2 Facelets ... macht Sinn? Kurz gesagt: #{item} ist im Moment, in dem JSTL läuft, nicht verfügbar.

Zurück zur konkreten Frage: Diese Style-Klasse wurde aufgrund der Kombination editMode="cell" und der physischen Präsenz der <p:cellEditor> -Komponente in <p:column> eingefügt. Der Datable-Renderer PrimeFaces berücksichtigt überhaupt nicht, ob <p:cellEditor> gerendert wird oder nicht. Es fügt einfach die Style-Klasse ui-editable-column ein, die wiederum den Style ui-cell-editing über JS / jQuery auslöst. Sie haben in die richtige Richtung für die Lösung gesucht, JSTL, die JSF-Komponenten in der JSF-Komponentenstruktur bedingt physisch hinzufügen / entfernen kann, aber leider wird es in diesem Konstrukt nicht funktionieren.

Am besten posten Sie einen Problembericht an die PrimeFaces-Mitglieder, wobei Sie nicht nur darum bitten Berücksichtigen Sie die physische Präsenz von <p:cellEditor> component, aber auch dessen isRendered() outcome. In Bezug auf PrimeFaces Version 3.5 wäre das in line 796 von DataTableRenderer class , die ursprünglich so aussieht (Zeilenumbrüche wurden zur besseren Lesbarkeit eingeführt):

%Vor%

Und sollte wie folgt geändert werden:

%Vor%

Wenn Sie nicht warten können, können Sie in der Zwischenzeit einen benutzerdefinierten Renderer erstellen.

%Vor%

Um es zu starten, registrieren Sie es wie folgt in faces-config.xml :

%Vor%     
BalusC 20.08.2013, 12:50
quelle

Tags und Links