gpt4 book ai didi

java - Wicket:延迟加载 DropDownChoice

转载 作者:行者123 更新时间:2023-12-01 14:19:30 25 4
gpt4 key购买 nike

我的 web 应用程序上的一个 DropDownChoice 列表需要很长时间才能创建,因为通过 LDAP 连接和 SQL 连接的某些操作获取选项。因此,整个页面的加载时间远远超过了几秒钟 - 我想说太多了。

所以我想要实现的是使用(对我来说最好的)Wicket 的内置 Ajax 功能来延迟加载此下拉列表,但我遇到了一些问题。

我知道如何制作常规 DropDownChoice 列表,这个简单的示例对我来说非常有用 - link

我也知道如何制作延迟加载的段落,来自 wicket-examples - link (源代码 -> LazyLoadingPage.html/LazyLoadingPage.java)

但是将它们放在一起会引发异常并导致 Wicket 的内部错误。

这是我尝试的方法:

在 HTML 中:

<select wicket:id="lazy"></select>

在 Java 中:

private String selected = "abc";
(...)
add(new AjaxLazyLoadPanel("lazy") {

@Override
public Component getLazyLoadComponent(String id) {
//simulating long time for simple list
try {
Thread.sleep(5000);
}
catch (InterruptedException e) {
throw new RuntimeException(e);
}
return new DropDownChoice<String>(
id, new PropertyModel<String>(this,"selected"),
Arrays.asList("abc","def"));

}
});
}

我从 Wicket 收到内部错误,日志中包含该错误:

ERROR Unexpected error occurred
Component [content] (path = [0:lazy:content]) must be applied to a tag of type [select], not: '<div wicket:id="content">' (line 0, column 0)
MarkupStream: [markup = jar:file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%207.0/webapps/devservices/WEB-INF/lib/wicket-extensions-1.5.7.jar!/org/apache/wicket/extensions/ajax/markup/html/AjaxLazyLoadPanel.html

,索引 = 0,当前 = ''

和堆栈跟踪。

我真的很感激一些帮助,我做错了什么,或者一些更好的代码示例。

最佳答案

感谢bert ,我把完整的解决方案放在这里,以防将来有人使用它。

我们需要创建自己的面板,因为 AjaxLazyLoadPanel 只能将一个面板更改为另一个面板。

MyPanel.html 示例:

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:panel>
<select wicket:id="project"></select>
</wicket:panel>
</body>
</html>

和 MyPanel.java :

public class MyPanel extends Panel {
private String selected = <what you want>;
private List<String> projectList <what you want>;
public MyPanel(String id) {
super(id);
add(new DropDownChoice<String>(
"project", new PropertyModel<String>(this, "selected"), projectsList));
}
}

在您的主页 html 上只需添加以下内容:

<span wicket:id="lazy2"></span>

在主页java文件中:

add(new AjaxLazyLoadPanel("lazy") {
@Override
public Component getLazyLoadComponent(String id) {
return new MyPanel(id);
}
});

希望它对其他人也有帮助:-)

关于java - Wicket:延迟加载 DropDownChoice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17741964/

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