# DataTable mit Checkboxen



## freez (14. Nov 2007)

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 (16. Nov 2007)

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
> ...


----------



## freez (20. Nov 2007)

@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:


```
<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 

```
private HtmlDataTable dataTable = new HtmlDataTable();
```
habe und einen ActionListener, der durch alle Rows iteriert und die Daten raus holt.


```
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
}
```


----------

