AjaxFallbackDefaultDataTable テーブルにテキスト列 (PropertyColumn) があります。テーブルには、編集可能なテキスト フィールドを含む列も含まれています。PropertyColumn の 1 つを AJAX で更新したいのですが、テーブル全体を更新したくありません。どうやってやるの?
1237 次
1 に答える
1
Wicket 6 を使用する場合は、コンポーネント間イベントを使用できます。
AjaxRequestTarget
まず、次のようなイベントを作成します。
public class AjaxUpdateEvent {
private final AjaxRequestTarget target;
public AjaxUpdateEvent(AjaxRequestTarget target) {
this.target = target;
}
public AjaxRequestTarget getAjaxRequestTarget() {
return target;
}
}
Component
このようなイベント フォームは、メソッドを使用して任意に送信できますsend()
。次のようなイベントを送信します。
send(getPage(), Broadcast.DEPTH, new AjaxUpdateEvent(target));
次に、AjaxFallbackDefaultDataTable
newCellItem をオーバーライドして、どこかから発生したときにイベントをリッスンし、目的のセル項目を AjaxRequestTarget に追加しようとします。そんな感じ:
AjaxFallbackDefaultDataTable table =
new AjaxFallbackDefaultDataTable("table", null, null, FLAG_RESERVED1) {
@Override
protected Item newCellItem(String id, int index, IModel model) {
Item item;
if (index == indexOfColumnYouWant){
item = new Item(id, index, model) {
@Override
public void onEvent(IEvent<?> event) {
super.onEvent(event);
if ((event.getPayload() instanceof AjaxUpdateEvent) ){
((AjaxRequestTarget)event.getPayload()).add(item);
}
}
};
} else {
item = super.newCellItem(id, index, model);
}
return item;
}
};
さらに、アイテムをターゲットに追加することもできますisVisible()
。
于 2013-02-10T20:19:46.167 に答える