wicket:child标签可以嵌套在页面上的另一个组件下吗?

pet*_*ter 4 html css wicket

在Wicket 1.4中,我试图允许子页面改变父页面中标记的CSS类,我一直这样做.这种情况的奇怪之处在于我想要目标的标签包装了子页面标记.这是我尝试的简化片段:

ParentPage.html

<div id="main" wicket:id="main">
  <wicket:child />
</div>
Run Code Online (Sandbox Code Playgroud)

ParentPage.java

public abstract class ParentPage {

  private WebMarkupContainer main;

  protected ParentPage() {
    main = new WebMarkupContainer("main");
    add(main);
  }

  public void setClassAttr(String cssClass){
    main.add(SimpleAttributeModifier("class", cssClass);
  }
}
Run Code Online (Sandbox Code Playgroud)

ChildPage.html

<wicket:extend>
  ...
</wicket:extend>
Run Code Online (Sandbox Code Playgroud)

ChildPage.java

public class ChildPage extends Page {    
   ...

    public ChildPage() {
      super();
      ...     
      setClassAttr("specific-class-for-this-page");
    }
}
Run Code Online (Sandbox Code Playgroud)

...这会爆发,因为看起来孩子的HTML 加载了,而不是java.(如果我删除了wicket:id和java代码div#main,一切都很好.)

请注意,我想要从子项操作的父项上的标记实际上是包装标记.在其他情况下,我做了类似的事情,我想要与之相关的标签往往是兄弟姐妹,或者与标签相距甚远.wicket:childwicket:child

我真正想做的就是让孩子改变父母的类属性 - 还有另外一种方法吗?为什么子页面不能嵌套在另一个Wicket页面组件下?

小智 7

我想指出,从Wicket 1.5开始,这已被删除.因此,如果您使用的是Wicket 1.5或更高版本,则可以使用TransparentWebMarkupContainer组件代替WebMarkupContainer.isTansparentResolver().我也遇到了和海报一样的问题.我有一个外部的包含div,包含一个wicket:child标签,我根据需要显示的内容调整其宽度(Twitter Bootstrap流体网格).我mainContentContainerTransparentWebMarkupContainer:

<div class="row-fluid">
    <div class="span3" wicket:id="sidebarPanel"></div>
    <div class="span6" wicket:id="mainContentContainer">
        <wicket:child/>
    </div>
    <div class="span3" wicket:id="rightPanel"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

有时rightPanel完全隐藏,并且mainContentContainer更改class="span9"为占用未使用的视口.

看到这里.

谢谢发帖.在我阅读这篇文章之前,我遇到了完全相同的问题.