在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:child
wicket:child
我真正想做的就是让孩子改变父母的类属性 - 还有另外一种方法吗?为什么子页面不能嵌套在另一个Wicket页面组件下?
小智 7
我想指出,从Wicket 1.5开始,这已被删除.因此,如果您使用的是Wicket 1.5或更高版本,则可以使用TransparentWebMarkupContainer
组件代替WebMarkupContainer.isTansparentResolver()
.我也遇到了和海报一样的问题.我有一个外部的包含div,包含一个wicket:child标签,我根据需要显示的内容调整其宽度(Twitter Bootstrap流体网格).我mainContentContainer
是TransparentWebMarkupContainer
:
<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"
为占用未使用的视口.
看到这里.
谢谢发帖.在我阅读这篇文章之前,我遇到了完全相同的问题.