将 Wicket 1.4 迁移到 wicket 9 时出现问题

问题描述 投票:0回答:1

在 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>
apache wicket
1个回答
0
投票

自 Wicket 1.5 起,您可以使用 Componet.setMarkup 显式设置组件标记或使用接口 IMarkupResourceStreamProvider 来生成它。

© www.soinside.com 2019 - 2024. All rights reserved.