在 wicket 1.4.x 中,我的页面有自定义容器 + 面板:
示例:
MyPage.java
public class MyPage extends WebPage {
public MyPage(){
add(new CustContainer, "custContainer");
}
}
我的页面.html
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<head></head>
<body>
<div wicket:id="custContainer"></div>
</body>
</html>
Custcontainer.java
public class CustContainer extends WebMarkupContainer {
private Component comp;
public CustContainer(String id){
super(id);
this.comp = new CustPanel("custPanel");
}
@Override
protected void onRender(MarkupStream markupStream) {
comp.render(getMarkupStream());
}
}
CustPanel.java
public class CustPanel extends Panel {
public CustPanel(String id){
super(id);
add(new Label("label1","This is my Label"));
}
}
CustPanel.html
<!DOCTYPE html>
<html xmlns:wicket="http://wicket.apache.org">
<wicket:panel>
<div><span wicket:id="label1"></span></div>
</wicket:panel>
</html>
在 wicket 1.4.x 中,这段代码(经过简化)工作得很好,但在 wicket 9 Component.render() 方法中,已删除 MarkupStream 作为参数。当我尝试使用 Component.render() 时,它不再理解它需要获取 custPanel.html
<div><span wicket:id="label1"></span></div>
部分并插入到 <div wicket:id="custContainer"> HERE </div>
内的 MyPage.html 标记中
问题:有人知道如何解决这个问题吗?因为添加
<div wicket:id="custPanel"></div>
到
custContainer div 块不是一个选项,因为我需要从数据库动态添加这些面板/组件 ID:
示例:
<div wicket:id="custContainer"> <div wicket:id="custPanel"></div> </div>
所以我需要在渲染标记之前将
<div wicket:id="custPanel">
添加到 custContainer div 块中。
顺便说一句:
@Override
public void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag)
不是解决方案,它仅在标记渲染后更改标记并引发异常。
长话短说:我希望将所有 CustPanel.html wicket 主体包含到 MyPage.html div 块中,并且 wiket id = custContainer
<div wicket:id="custContainer">HERE I need CustPanel.html wicket content to be rendered/included</div>
自 Wicket 1.5 起,您可以使用 Componet.setMarkup 显式设置组件标记或使用接口 IMarkupResourceStreamProvider 来生成它。