wicket - Implementieren von Ajax Elemente hinzufügen/entfernen ListView
Im verrückt über dieses Thema. Implementiert habe ich eine ListView, die Sie hinzufügen können/entfernen TextField dinamically, sondern nur die letzten TextField entfernt.
Beispiel:
//Object type which is used in the list
public class ExampleObject implements Serializable{
private String keyword;
public String getKeyword() {
return this.keyword;
}
public void setKeyword(String s) {
keyword = s;
}
}
//ListView
List<ExampleObject> keywordList = new ArrayList<ExampleObject>();
keywordList.add(new ExampleObject());
ListView keywordView = new ListView("keywordView", keywordList) {
@Override
protected void populateItem(final ListItem item) {
ExampleObject model = (ExampleObject) item.getModelObject();
item.add(new TextField("subKeyword", new PropertyModel(model, "keyword")));
//keyword remove link
AjaxSubmitLink removeKeyword = new AjaxSubmitLink("removeKeyword", myForm)
{
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
ExampleObject selected = (ExampleObject) item.getModelObject();
//I also tried deleting by index. println shows the
//selected object is the element I want to remove, so why always
//remove last object of the list?
keywordList.remove(selected);
if (target != null) {
target.addComponent(myForm);
}
}
};
item.add(removeKeyword);
//keyword add link
AjaxSubmitLink addKeyword = new AjaxSubmitLink("addKeyword", metadataForm)
{
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
keywordList.add(new ExampleObject());
if (target != null) {
target.addComponent(myForm);
}
}
};
item.add(addKeyword);
}
keywordView.setReuseItems(true);
metadataForm.add(keywordView);
Jede Hilfe wäre sehr dankbar, weil ich, was dieses Problem ist wirklich ein sehr blöder Fehler, aber ich cant get it!
Dank
InformationsquelleAutor jOki | 2010-08-18
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es könnte so einfach sein wie loswerden von der Linie
Den
reuseItems
Flagge ist eine Effizienz, so dass die Seite nicht neu erstellen der ListView-Elemente unnötig, aber es kann zu Verwirrung führen, wie, was Sie sehen.ListView
war wirklich nicht für die Verwendung mit Formen, obwohl, und Sie werden wahrscheinlich besser dran mit einer anderen Taktik völlig.Diese blog-Eintrag auf den Aufbau einer Listen-editor, Formular-Komponente nützlich sein könnten. Es müssen einige änderungen, wenn Sie nicht auf Wicket 1.4, aber ähnliches ist definitiv möglich, in Wicket 1.3, und die Kommentare haben einige Hinweise.
Gut, ich habe versucht, und ich arbeitete!Aber ich denke, dass bert sagt, ich kippe verwenden Sie ein ListView-Steuerelement für diesen Zweck wegen der Validierung.
Ich bin keineswegs überrascht, dass es funktionierte. Aber bert und seanizer sind beide Recht, dass es nicht empfohlen. Wenn Sie können, den Sinn der Sachen in dem blog-Eintrag, den ich verlinkte, ist es wahrscheinlich besser, als dies über ein ListView oder RefreshingView. Und dieser blog ist von einem der Autoren von Wicket.
Na endlich ich werde es implementieren manuell, weil ich habe einige ajax-Fehler bei der Validierung der Verwendung jeder dieser Methoden. Dank u!
InformationsquelleAutor Don Roby
Lesen der javadoc von ListView#setReuseItems():
"Aber wenn Sie ändern die listView model-Objekt, als müssen Sie manuell aufrufen listView.removeAll (), um den Wiederaufbau der ListItems."
InformationsquelleAutor svenmeier
Können Sie nicht mit einem
ListView
diese Weise. Entweder die Mitglieder derListView
zur Verfügung gestellt:removeLink(java.lang.String id, ListItem<T> item)
und
newItem(int index)
aber ich nie verwendet diese. Wenn ich eine Anzeige
List
und in der Lage sein, hinzufügen, entfernen von Elementen dynamisch, ich bevorzuge dieRefreshingView
.Wenn Sie
FormComponents
innerhalb einerRefreshingView
, stellen Sie sicher, dass Sie eineReusestartegy (setItemReuseStrategy())
Bert
Ist diese noch aktiv? wenn ja, ich könnte sich hinsetzen und schreiben Sie ein Beispiel.
Neue Menschen sind auf der Suche diese Frage und warten Sie für das Beispiel. Ich bin ein Beispiel für diejenigen, die finden diese, wenn Sie mit ähnlichen Fragen.
InformationsquelleAutor bert