作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的 propertyListview 中有一些数据,周围有一个容器,但是当我想用 Ajax 更新它时,它什么也没做!我如何使用 Ajax 更新我的 PropertyListview?
编辑在后台我使用 JSON Parse 解析来自气象站的数据,该数据可能会发生很大变化,所以我想更新 propertyListview 中的数据
public class WeerPanel extends Panel {
public WeerPanel(String id) throws IOException {
super(id);
final WeerService weerService = new WeerServiceImpl();
PropertyListView<Weer> newview = new PropertyListView<Weer>("weer", weerService.getWeer()) {
@Override
protected void populateItem(ListItem<Weer> item) {
item.add(new Label("temperatuur"));
item.add(new StaticImage("type", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("omschrijving"));
}
};
final WeerVoorspellingService weerVoorspellingService = new WeerVoorspellingServiceImpl();
PropertyListView<WeerVoorspelling> hateView = new PropertyListView<WeerVoorspelling>("weersvoorspelling", weerVoorspellingService.getWeerVoorspelling()) {
@Override
protected void populateItem(ListItem<WeerVoorspelling> item) {
item.add(new Label("dag"));
item.add(new StaticImage("typeVoorspelling", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("minTemperatuur"));
item.add(new Label("maxTemperatuur"));
}
};
final WebMarkupContainer containerWeer = new WebMarkupContainer("containerWeer");
containerWeer.setOutputMarkupId(true);
containerWeer.add(hateView);
containerWeer.add(newview);
add(containerWeer);
add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
@Override
protected final void onTimer(AjaxRequestTarget target) {
target.add(containerWeer);
}
});
}
这是我在后台执行的一些代码,它是一个每次通过随机数改变天气温度的虚拟代码。
Random r = new Random();
int randomInt = r.nextInt(100);
weer.add(new Weer("rain", "Mooi bewolkt", randomInt, v.getVoorspellingen()));
虚拟代码很好,但在我的页面上仍然看不到任何变化....好像我的列表没有获得任何新数据..
FIXED 这是供人们使用的代码
public class WeerPanel extends Panel {
public WeerPanel(String id) {
super(id);
add(createContainer());
add(new AbstractAjaxTimerBehavior(Duration.seconds(10)) {
@Override
protected final void onTimer(AjaxRequestTarget target) {
target.add(createContainer());
}
});
}
private final WebMarkupContainer createContainer() {
final WeerService weerService = new WeerServiceImpl();
PropertyListView<Weer> newview = null;
try {
newview = new PropertyListView<Weer>("weer", weerService.getWeer()) {
@Override
protected void populateItem(ListItem<Weer> item) {
item.add(new Label("temperatuur"));
item.add(new StaticImage("type", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("omschrijving"));
}
};
} catch (Exception e) {
e.printStackTrace();
}
WeerVoorspellingService weerVoorspellingService = new WeerVoorspellingServiceImpl();
PropertyListView<WeerVoorspelling> hateView = null;
try {
hateView = new PropertyListView<WeerVoorspelling>("weersvoorspelling", weerVoorspellingService.getWeerVoorspelling()) {
@Override
protected void populateItem(ListItem<WeerVoorspelling> item) {
item.add(new Label("dag"));
item.add(new StaticImage("typeVoorspelling", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("minTemperatuur"));
item.add(new Label("maxTemperatuur"));
}
};
} catch (Exception e) {
e.printStackTrace();
}
WebMarkupContainer containerWeer = new WebMarkupContainer("containerWeer");
containerWeer.setOutputMarkupId(true);
containerWeer.add(hateView);
containerWeer.add(newview);
addOrReplace(containerWeer);
return containerWeer;
}
}
最佳答案
在您的 onTimer
中,您将对象添加到自身而不更改它。我建议将 View /容器重新生成移动到新方法中。
然后像这样重定义onTimer
:
add(new AbstractAjaxTimerBehavior(Duration.seconds(10))
{
@Override
protected final void onTimer(AjaxRequestTarget target)
{ //createContainer() generates the views and container.
target.add(createContainer());
}
}
编辑:
我会这样定义 createContainer()
:
private WebMarkupContainer createContainer()
{
final WeerService weerService = new WeerServiceImpl();
PropertyListView<Weer> newview = new PropertyListView<Weer>("weer", weerService.getWeer())
{
@Override
protected void populateItem(ListItem<Weer> item)
{
item.add(new Label("temperatuur"));
item.add(new StaticImage("type", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("omschrijving"));
}
};
WeerVoorspellingService weerVoorspellingService = new WeerVoorspellingServiceImpl();
PropertyListView<WeerVoorspelling> hateView = new PropertyListView<WeerVoorspelling>("weersvoorspelling", weerVoorspellingService.getWeerVoorspelling())
{
@Override
protected void populateItem(ListItem<WeerVoorspelling> item)
{
item.add(new Label("dag"));
item.add(new StaticImage("typeVoorspelling", String.format("images/%s.png", item.getModelObject().getType())));
item.add(new Label("minTemperatuur"));
item.add(new Label("maxTemperatuur"));
}
};
WebMarkupContainer containerWeer = new WebMarkupContainer("containerWeer");
containerWeer.setOutputMarkupId(true);
containerWeer.add(hateView);
containerWeer.add(newview);
add(containerWeer);
return containerWeer;
}
编辑以匹配最终解决方案
然后像这样定义你的 Panel
构造函数:
public WeerPanel(String id) throws IOException
{
super(id);
final WebMarkupContainer container = createContainer();
add(new AbstractAjaxTimerBehavior(Duration.seconds(10))
{
@Override
protected final void onTimer(AjaxRequestTarget target)
{ //createContainer() generates the views and container.
container.addOrReplace(createContainer());
}
}
}
关于java - Wicket - Ajax PropertyListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365150/
我的 propertyListview 中有一些数据,周围有一个容器,但是当我想用 Ajax 更新它时,它什么也没做!我如何使用 Ajax 更新我的 PropertyListview? 编辑在后台我使
我是一名优秀的程序员,十分优秀!