Ok, I've just whipped up a simple page that demonstrates the problem I was having with ajax updates in a ListView not working.
Theres two ajax timers at the root of the page, and 10 in a loop. Also note that the use of
MarkupIdSetter.INSTANCE crashes.
I see the models for each ListItem update once on page load, but nothing subsequent.
AjaxTest.java:
--------------------------------
/*
* Created by IntelliJ IDEA.
* User: amrk
* Date: 11/02/2006
* Time: 16:55:54
*/
package com.theoryinpractice.timetrackr.pages;
import com.theoryinpractice.timetrackr.TimeTrackrPage;
import wicket.AttributeModifier;
import
wicket.Component;
import wicket.PageParameters;
import wicket.ajax.AjaxSelfUpdatingTimerBehavior;
import wicket.markup.html.basic.Label;
import wicket.markup.html.list.ListItem;
import wicket.markup.html.list.ListView
;
import wicket.model.Model;
import wicket.util.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.io.Serializable;
public class AjaxTest extends TimeTrackrPage {
int count = 0;
int count2 = 0;
List items;
public class IntegerHolder implements Serializable {
private Integer value = 0;
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public void increment() {
value = value++;
}
}
public AjaxTest(final PageParameters parameters) {
Label label = new Label("one", new Model() {
public Object getObject(final Component component) {
count++;
return Integer.valueOf(count).toString();
}
});
label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));
add(label);
label = new Label("two", new Model() {
public Object getObject(final Component component) {
count2++;
return Integer.valueOf(count2).toString();
}
});
label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(2)));
add(label);
items = new ArrayList();
for (int i = 1; i < 10; i++) {
items.add(new IntegerHolder());
}
add(new ListView("list", items) {
protected void populateItem(final ListItem item) {
final IntegerHolder holder = (IntegerHolder) item.getModelObject();
final Label label = new Label("value", new Model() {
public Object getObject(final Component component) {
System.out.println(holder.toString() + " refreshed");
holder.increment();
return holder.getValue().toString();
}
});
item.add(label);
// label.add(MarkupIdSetter.INSTANCE);
label.add(new AttributeModifier("id", true, new Model() {
public Object getObject(final Component component) {
return label.getPageRelativePath();
}
}));
label.add(new AjaxSelfUpdatingTimerBehavior(Duration.seconds(1)));
}
});
}
}
---------------------------------
AjaxTest.html
----------------------------------
<html>
<head>
<title>Time Tracker</title>
<link rel="stylesheet" href="" type="text/css"/>
</head>
<body>
<span wicket:id="one">ONE</span><br/>
<span wicket:id="two">ONE</span><br/>
<ul>
<li wicket:id="list">
<span wicket:id="value">value</span>
</li>
</ul>
</body>
</html>
-------------------------------------
--
i like my video games - mamma said they are gonna melt my brains
i like my video games - i don't care what daddy said; they're my reality
- henning pauly
- [Wicket-user] Ajax problems - sample page... Mark Derricutt
- Re: [Wicket-user] Ajax problems - sample page... Igor Vaynberg
- Re: [Wicket-user] Ajax problems - sample page... Mark Derricutt
