DataTable mit Checkboxen

Status
Nicht offen für weitere Antworten.

freez

Top Contributor
Hallo,

ich habe eine Frage zu einer grundlegenden Vorgehensweise:

ich habe eine Tabelle in einer Datenbank mit Daten von verschiedenen Personen. Weiterhin habe ich eine Tabelle mit Gruppen. Auf einer JSF Seite möchte ich einer Gruppe A beliebige Personen zuordnen.

Ich habe mir vorgestellt eine dynamische Tabelle "h:datatable" zu verwenden, in der alle Personen ausgegeben werden, die in der Datenbank vorhanden sind. Vor dem Namen der Personen sollen checkboxen zum anwählen sein. Jede angewählte Person soll dann später in einer dritten Tabelle dieser Gruppe A zugordnet werden (n:m).

Da die Tabelle beliebig groß sein kann, habe ich da ein Problem mit der Datenübernahme in die Managed Bean. Wie komme ich an alle Personen, die angehackt sind. Es wäre zusätzlich sinnvoll, wenn ich jeder Person den Primary Key aus der Datenbank mitgeben könnte, damit ich von den Angehackten Personen den eindeutigen Key in der Managed Bean habe um dann die Datenbankänderungen vorzunehmen.

Wie mache ich das am Besten?
 

JimPanse

Bekanntes Mitglied
Also ich würde das volle potenzial von JSF nutzen und ein Binding verwenden!

Das würde (jetzt stark vereinfacht so aussehen):

public class Person{
private int id;
private String name;
//getter und setter
}

public class BackingBean{

private List<Person> list = new ArrayList<Person>();
private HtmlDataTable myDataTable = new HtmlDataTable();
private choiceList<Person> listChoice = new ArrayList<Person>();

// CommandButton
public void holeDatenAusDerZeile(){
Person person = (Person) myDataTable.getRowData();
listChoice.add(person);
}

}

JSF 1. Auswahl
Code:
<h:form>
<h:dataTable
value='#{BackingBean.list}'
var="auswahl"
binding='#{BackingBean.myDataTable }'
>
<h:column>
 <h:outputText value="auswahl.name"/>
</h:column>
<h:column>
<h:commandButton value="setzen" action='#{BackingBean.holeDatenAusDerZeile}'/>
</h:column>
</h:dataTable>

<h:commandButton value="weiter"  action="zuranderenSeite"/>
</h:form>

JSF 2.DieAuswahl
<h:form>
 <h:form>
<h:dataTable
value='#{BackingBean.listChoice }'
var="DieAuswahl"
>
<h:column>
 <h:outputText value="DieAuswahl.name"/>
</h:column>
</h:dataTable>
</h:form>

BackingBean - muss natürlich in die Session!
So sollte es ungefähr funktionieren, wenn du aber checkboxen verwenden willst dann musst du ein valueChangeListemer hinterlegen der sich dann alle angelicken holt und in deine Auswahlliste setzt!

So das sollte helfen hoffe ich.

Gruß
 

freez

Top Contributor
@JimPanse: deine Antwort war gut :) Danke.

Hier nun meine Lösung:

die Tabelle mit den Checkboxen und einem CommandLink mit einem ActionListener um das ganze Formular abzuschicken:

Code:
<h:form>
<h:dataTable value="#{MPC.persons}"
    var="Person"
    binding="#{MPC.dataTable}">
    <h:column>
        <h:selectBooleanCheckbox value="#{Person.select}" /><h:outputText value="#{Person.name}" />
    </h:column>
</h:dataTable>
<h:commandLink value="Abschicken" actionListener="#{MPC.collectPersons}" />
</h:form>

Meine BackingBean sieht nun so aus, dass ich ein weiteres Attribut
Code:
private HtmlDataTable dataTable = new HtmlDataTable();
habe und einen ActionListener, der durch alle Rows iteriert und die Daten raus holt.

Code:
public class MPC {
	private List <Person> persons = new ArrayList <Person> ();
	private HtmlDataTable dataTable = new HtmlDataTable(); 


	public void collectPersons(ActionEvent event){
		int anz = dataTable.getRowCount();
		for(int i = 0; i < anz; i++){
			dataTable.setRowIndex(i);
			Person ts = (Person) dataTable.getRowData();
			System.out.println(ts.getName() + " - "  + ts.isSelect());
		}
	}

// .... some more, e.g. Setter and Getter
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
fiesematente JSF ajax innerhalb DataTable und verschachtelte EL (Brauch dringend hilfe) Allgemeines EE 8
B eine vom Admin hochgeladene csv -Datei in der Datatable auch von jedem User sichtbar Allgemeines EE 0
G Primefaces Zeile in DataTable auswählen Allgemeines EE 1
G JSF Datenstruktur für DataTable Allgemeines EE 2
S Primefaces DataTable und Vererbung Allgemeines EE 1
Raidri [SEAM] rich:dataTable sortBy Problem Allgemeines EE 6
W PrimeFaces datatable zentrieren Allgemeines EE 15
J JSF2.0 / Doppelklick DataTable / Richfaces Allgemeines EE 4
P <h:dataTable> doppelte ausgabe Allgemeines EE 8
D Liste für dataTable (JSF) manuell füllen Allgemeines EE 2
M h:datatable und Info auf leere Liste Allgemeines EE 2
M JSF datatable ineinander schachteln Allgemeines EE 6
N JSF - Frage zu Managed Beans und DataTable Allgemeines EE 4
J JSF: dataTable nebeneinander anordnen Allgemeines EE 5
N JSF + Facelets: Datatable wird nicht angezeigt Allgemeines EE 1
K probleme mit <h:dataTable> Allgemeines EE 2
O Anzeigen mehrerer columns in einer DataTable Allgemeines EE 4
K Datatable Löschen Fehler Allgemeines EE 6
S JSF datatable mit buttons Werte übergeben Allgemeines EE 5
smitty Farbe der Tabellenzellen in "<t:dataTable>" Allgemeines EE 5
F Index im Datatable Allgemeines EE 4
P JSF Datatable und löschen Allgemeines EE 2
C Seltsames Verhalten von JSF DataTable Allgemeines EE 2
Zasch JSF: Checkboxen sollen InputText aktivieren. Allgemeines EE 14
N Liste mit Checkboxen an Servlet übergeben? Allgemeines EE 3
N JSF Checkboxliste: einige Checkboxen vorbelegen Allgemeines EE 2
N JSF-Checkboxen in Tabelle mit Buttons dahinter Allgemeines EE 4

Ähnliche Java Themen

Neue Themen


Oben