DataTable - Row Hinzufügen

T

TeamBob

Hallo
Also ich habe eine DataTabe in JSF / RichFaces programmiert. Das ist ja nur das visuelle und der die ganze
Basicstructure ist in Java.
Also die basicstructe in Java seht ihr unten. In einer anderen Klasse ( TaskListData ) stehen die Getter-Setter
methoden ( ID;Name ). Jetzt möchte ich einen Button "add" hinzufügen, der es mir ermöglicht per Knopfdruck eine
neue leere Zeile hinzufügen.

Den Button in JSF habe ich bereits und die Action des Buttons wird ja einfach so eingetragen.

<h:commandButton value="add" action="#{DatasourcesModell.addNewRow}"/>

Jedoch fehlt mir einfach der Java Teil. Ich weis also nicht wie genau ich die ganze Add sache in der Java Klasse umsetzen soll...
Ich hoffe ihr könnt mir helfen

Code:
public class DatasourcesModell implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 5509240439745058295L;

    private List<TaskListData> dataList;  

		public void loadDataList() {       
  
			dataList = new ArrayList<TaskListData>();  

			TaskListData data1 = new TaskListData();  
			data1.setId(1);  
			data1.setName("Item 1");  
    
			TaskListData data2 = new TaskListData();  
			data2.setId(2);  
			data2.setName("Item 2");  
     
			TaskListData data3 = new TaskListData();
			data3.setId(3);
			data3.setName("Item 3");
       

			dataList.add(data1);  
			dataList.add(data2);  
			dataList.add(data3);

}
 
Hi,

Code:
<h:commandButton value="add" action="#{DatasourcesModell.addNewRow}"/>
das ist nicht so vorgedacht in JSF. Versuch es mit

Code:
<h:commandButton value="add" actionListener="#{DatasourcesModell.addNewRow}"/>
Für die Methode "addNewRow" musst Du dann wohl einen Parameter vom Typ ActionEvent ergänzen.

Grob kannst Du dir merken, dass die Action das "Navigier irgendwohin"-Ding ist und der ActionListener das "Tu irgendwas mit den Sachen auf der Seite"-Ding.
 
Hallo
Danke erstmal für deine Antwort ich werde es mir merken.
Jedoch weis ich jetzt immernoch nicht wie ich eine neue zeile
hinzufügen kann...
 
Das müsstest Du dann im ActionListener machen, so etwa
Java:
public void addNewRow(ActionEvent event) {
  int newId = 1; // TODO: ID generieren oder irgendwo auslesen.
  String newDataName = null; // TODO: name generieren oder irgendwo auslesen.

  TaskListData newData = new TaskListData();
  newData.setId(newId );
  newData.setName(newDataName );
  dataList.add(newData);
}
 
Hey...
Also ich habe es hinbekommen wie man eine Zeile Hinzufügt, aber ich weis nicht wie man eine zeile löschen kann? Ich habe in jeder zeile ein löschbutton und wenn ich den drücke wird die zeile gelöscht.
Aber wie?

Code:
public class DatasourcesModell {

	
	private List<MyData> dataList;  

	public void loadDataList() {       

		dataList = new ArrayList<MyData>();  

		addNewDataItem();
	}
	
    // Init ---------------------------------------------------------------------------------------

    // Add new row to datatable.
    private int addCount;
    
    // Add row numbers.
    private HtmlDataTable numberDataTable;

    // Constructors -------------------------------------------------------------------------------

    public DatasourcesModell() {
        // Preload data list.
        loadDataList();
    }

    // Actions ------------------------------------------------------------------------------------

    //Add new row to datatable: add new data item.
    public String addNewDataItem() {

        // Add new MyData item to the data list.
        dataList.add(new MyData());
        addCount++;

        log(dataList);
        return null;
    }

    // Delete a row from datatable
   
    	
  
    
    
    // Save datatable

    // Getters ------------------------------------------------------------------------------------

    public List<MyData> getDataList() {
        return dataList;
    }

    public HtmlDataTable getNumberDataTable() {
        return numberDataTable;
    }

    // Setters ------------------------------------------------------------------------------------

    public void setNumberDataTable(HtmlDataTable numberDataTable) {
        this.numberDataTable = numberDataTable;
    }

    // Helpers ------------------------------------------------------------------------------------

    
    private static void log(Object object) {
        System.out.println(new Exception().getStackTrace()[1].getMethodName() + ": " + object);
    }

}

und das steht im JSF-Teil
<h:commandButton value="Add" action="#{datasourcesModell.addNewDataItem}" />
und es funktioniert mit dem hinzügen.
Aber ich brauche wie gesagt noch irgendwie eine Funktion "DeleteSelectedRow" oder so...
Hoffe ihr könnt mir helfen
 
Dazu gibt es 2 Geschmacksrichtungen. Du könntest,

1) ein ausgewähltes Item löschen. Dazu bräuchtest Du eine Checkbox oder einen Radiobutton neben den Items deiner Liste. Dazu musst Du dir dann noch irgendwo merken, welches Item selektiert wurde. Wenn der AW dann auf löschen clickt, werden die ausgwählten Items gelöscht.

2) Du machst einen Löschen Button neben jedes Item. Wenn der AW dann auf löschen clickt, wird das Item neben dem Button gelöscht. Damit das klappt, müsstest Du dem button das item als Attribut mit geben und im ActionListener auslesen.

So wie Du es beschreibst wäre der Weg (2) gut für Dich. Dazu bräuchtest Du in der JSP
Code:
<h:commandButton value="Delete" action="#{datasourcesModell.deleteDataItem}">
  <f:attribute name="attr_item_to_delete" value="#{item}" />
</h:commandButton>
dann brauchst Du noch einen Actionlistener der das Attribut ausliest ...
Java:
public void deleteDataItem(ActionEvent event) {
// Noch als Tip, das Attribut hängt am Event, also 
  event.get // TODO: Das Auslesen des Attributs vervollständigen.
}

Du könntest das auch mit
Code:
<f:param ... />
machen. Es gibt ein recht gutes Tutorial, http://www.laliluna.de/first-java-server-faces-tutorial.html

Nicht das Du sowas nicht schon gesucht hättest ;)
 
Zuletzt bearbeitet:
Hey...
Also danke für deine schnelle Antwort.
Also ich geb hier mal meine ICQ nr. und hoffe das du mich mal addest und mir dann mal
weiterhelfen könntest. Wäre echt super, weil ich nich so richtig vorrankomme....
Danke dir...

ICQ: 204113427
 
Also das ist der Quelltext der java Klasse und es geht um die Fkt.
deleteDataItem. Ich weis nciht so recht wie genau die lauten muss, dass ich die Zeile
lösche wo der löschButton drin ist?


Code:
public class DatasourcesModell {
	
	private List<MyData> dataList;  

	public void loadDataList() {       

		dataList = new ArrayList<MyData>();  

		addNewDataItem();
	}
	
    // Init ---------------------------------------------------------------------------------------

    // Add new row to datatable.
    private long addCount;
    
    // Add row numbers.
    private HtmlDataTable numberDataTable;

    // Constructors -------------------------------------------------------------------------------

    public DatasourcesModell() {
        // Preload data list.
        loadDataList();
    }

    // Actions ------------------------------------------------------------------------------------

    //Add new row to datatable: add new data item.
    public String addNewDataItem() {

        // Add new MyData item to the data list.
        dataList.add(new MyData(addCount));
        addCount++;

        log(dataList);
        return null;
    }

    // Delete a row from datatable
     public void deleteDataItem(ActionEvent event) {
	 event.get // TODO: Das Auslesen des Attributs vervollständigen.
  	}
    
    
    
    // Save datatable

    
    
    // Getters ------------------------------------------------------------------------------------

    public List<MyData> getDataList() {
        return dataList;
    }

    public HtmlDataTable getNumberDataTable() {
        return numberDataTable;
    }
    

    // Setters ------------------------------------------------------------------------------------

    public void setNumberDataTable(HtmlDataTable numberDataTable) {
        this.numberDataTable = numberDataTable;
    }
    
  
    // Helpers ------------------------------------------------------------------------------------

    
    private static void log(Object object) {
        System.out.println(new Exception().getStackTrace()[1].getMethodName() + ": " + object);
    }

}
 

Neue Beiträge

Zurück