gpt4 book ai didi

java - Wicket - Ajax PropertyListView

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:30:08 24 4
gpt4 key购买 nike

我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com