22 Stimmen

Zeilenauswahl nur für einige wenige Zeilen in einer p:dataTable deaktivieren

Ich würde gerne wissen, ob es eine Möglichkeit gibt, die radio-basierte Zeilenauswahl für einen bestimmten Satz von Zeilen in Primefaces zu deaktivieren, basierend auf einer Bean-Eigenschaft.

<p:dataTable var="foo" value="#{bean.foos}" selection="#{bean.selectedFoo}">`
    <p:column selectionMode="single" />
    <p:column>
        <h:outputText value="#{foo.bar}" />
    </p:column>
<p:dataTable>

In diesem Fall stelle ich mir vor, dass ich die Zeilen deaktivieren möchte, in denen foo.bar == 1,5,10 Mit der Deaktivierung der Zeilen meine ich die Deaktivierung der mit der Zeile verbundenen Optionsschaltfläche.

Ich konnte nicht herausfinden, ein Weg, das zu erreichen... irgendwelche Ideen? Sogar eine css + javascript hack Lösung wäre akzeptabel.

26voto

robinvrd Punkte 1590

Seit der Version 4.0 wird die Primefaces-Datenbank mit einer disabledSelection Eigentum.

<p:dataTable var="foo" value="#{bean.foos}" selection="#{bean.selectedFoo}" disabledSelection="#{foo.bar == 1}">
    <p:column selectionMode="single" />
    <p:column>
        <h:outputText value="#{foo.bar}" />
    </p:column>
<p:dataTable>

Dann, wenn foo.bar == 1 wahr ist, wird das Kontrollkästchen deaktiviert.

1voto

MichaelC Punkte 231

Ich bin auf dasselbe Problem gestoßen, bei dem ich nur bestimmte Zeilen von der Auswahl ausschließen wollte (eine oder mehrere), basierend auf einer Bean-Eigenschaft. Die kurze Antwort für mich war, einfach das Optionsfeld in dieser Zeile auszublenden, damit es nicht ausgewählt werden konnte. Für meine Bedürfnisse musste ich in der Lage sein, zusätzliche Auswahlen zur Laufzeit zu verarbeiten. Das bedeutete, dass ich sicher sein musste, dass die Zeile(n) physisch abgewählt waren, bevor weitere Auswahlen getroffen wurden, damit sie bei der nachfolgenden Verarbeitung nicht erneut verarbeitet wurden; achten Sie also auf diese Bedingung.

Für andere, die in Zukunft vielleicht über diese Frage stolpern, habe ich Folgendes getan.

1) In der p:datatable fügte ich das Attribut rowStyleClass hinzu und gab auf der Grundlage der Bean-Kriterien eine Klasse an, z. B: 'is-selectable' oder 'not-selectable'.

rowStyleClass="#{myBean.alreadyProcessedList.contains(item) ? 'not-selectable' : 'is-selectable'}"

In meinem Laufzeitprozess wurden ausgewählte Zeilen zu dieser Liste hinzugefügt, damit sie "nicht auswählbar" sind, sobald das Formular nach der Verarbeitung erneut gerendert wird. Beim anfänglichen Laden sollten die nicht auswählbaren Zeilen bereits zur Liste hinzugefügt worden sein, oder sie sollten durch die Bedingung, die Sie in Ihrem Fall benötigen, behandelt werden.

2) Definieren Sie CSS, um das Radio/Kontrollkästchen mit .not-selectable auszublenden. Die Verwendung von '!important' war notwendig, um das Inline-Styling außer Kraft zu setzen.

tr.not-selectable  div.ui-radiobutton,
tr.not-selectable  div.ui-chkbox {
    visibility: hidden !important;
}

0voto

Maddy Punkte 3606

Sie können die Deaktivierung mit Jquery wie folgt versuchen

<script type="text/javascript" src="jquery.js"></script>
        <script>
         $(function(){
              $("#myform  input[type = radio]:nth(1)").attr('disabled', 'disabled');
        });
</script>

myform:Ihr Formularname Anstelle von nth(1) können Sie die zu verteilende Zeilennummer angeben.

-1voto

user13573686 Punkte 1

Einstellen der Eigenschaft disabledSelection (Deaktiviert die Zeilenauswahl, wenn true. Hat Vorrang vor p:column's disabledSelection attr. Beispiel: var="xxx" disabledSelection="#{xxx.year > 1960}"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X