Java 如何维护wicket中面板的样式信息?

Java 如何维护wicket中面板的样式信息?,java,css,wicket,Java,Css,Wicket,我已经和Wicket一起工作了几个星期了,我一直在寻找在标记中维护面板样式的最佳方法。例如,假设我有下面的面板忽略Java端,我不相信它是相关的: <wicket:panel> <div class="brick"></div> </wicket:panel> 然而,对于当前代码,我似乎仅限于以下两种选择之一: 输出所有标记,最终标记如下所示: <wicket:panel> <div class="wall">

我已经和Wicket一起工作了几个星期了,我一直在寻找在标记中维护面板样式的最佳方法。例如,假设我有下面的面板忽略Java端,我不相信它是相关的:

<wicket:panel>
  <div class="brick"></div>
</wicket:panel>
然而,对于当前代码,我似乎仅限于以下两种选择之一:

输出所有标记,最终标记如下所示:

<wicket:panel>
  <div class="wall">
    <div wicket:id="aBrick" class="good"></div>
    <div wicket:id="bBrick" class="bad"></div>
  </div>
</wicket:panel>
<div class="wall">
  <div class="brick good"></div>
  <div class="brick bad"></div>
</div>
<div class="wall">
  <div class="good">
    <div class="brick"></div>
  </div>
  <div class="bad">
    <div class="brick"></div>
  </div>
</div>
<div class="wall">
  <div class="brick"></div>
  <div class="brick"></div>
</div>
或- B调用砖上的setRenderBodyOnlytrue,最终标记如下所示:

<wicket:panel>
  <div class="wall">
    <div wicket:id="aBrick" class="good"></div>
    <div wicket:id="bBrick" class="bad"></div>
  </div>
</wicket:panel>
<div class="wall">
  <div class="brick good"></div>
  <div class="brick bad"></div>
</div>
<div class="wall">
  <div class="good">
    <div class="brick"></div>
  </div>
  <div class="bad">
    <div class="brick"></div>
  </div>
</div>
<div class="wall">
  <div class="brick"></div>
  <div class="brick"></div>
</div>
在选项A中,我现在有一个我不想要的额外包装器div,它可能会也可能不会破坏我的布局。在选项B中,我失去了控制布局的类。在我看来,这两种选择都是不可接受的,但我不知道它们的正确解决方案

似乎我可以对brick面板进行子分类,这样我就有了一个好的brick和一个坏的brick面板,但是这个解决方案所需的代码量太大了

帮忙

忽略Java方面,我认为这与此无关

实际上,在Java端干净地完成这项工作可能是最容易的

在墙构件的代码中,可能有以下内容:

add(new BrickPanel("abrick", ... );
add(new BrickPanel("bbrick", ... );
您可以使用AttributeAppender在Java中添加不同的类:

BrickPanel a = new BrickPanel("abrick", ... );
BrickPanel b = new BrickPanel("bbrick", ... );
a.add(new AttributeAppender("class", "good"));
b.add(new AttributeAppender("class", "bad"));
add(a);
add(b);
如果它们共享一个公共砖块类属性,则该属性可以保留在共享标记中。这个附加器只会添加好的或坏的

当然,您也可以使用子类,而区分这两个子类的代码量相当于在这两个子类中使用了不同的属性appender调用,因此这确实不是很糟糕。

使用此标记:

<wicket:panel>
  <div class="wall">
    <div wicket:id="goodBrickPanel"></div> 
    <div wicket:id="badBrickPanel"></div>
  </div>
</wicket:panel>

注意:尽可能避免使用SetRenderBodyOnly。您将来可能需要这些标签来设计样式或进行ajax更新。

谢谢您的回复!我理解这个答案,但它让我感到沮丧,因为这样做会删除html的预览功能。这也是令人沮丧的,因为它强制我的原始面板之外的代码应用brick类。我希望能够将brick组件添加到我的页面中,并且它始终是一块砖块,无需进一步努力。我认为这是不可能的Wicket,但我真的想找到一个更好的方法,如果它是可用的。然而,这可能是最好的。谢谢你的洞察力!当涉及到预览功能时,就没有问题了——你仍然可以在html中使用CSS类brick good和brick bad。AttributeModifier将替换它们。这是事实,但是它需要相当于代码重复的内容。如果它们不同步,可能会导致意外行为。从代码的角度来看,似乎没有任何逻辑流程来完成我想要的。似乎我真正想要的是一种将布局管理与样式分离的方法。不幸的是,在html/css中,它们是相同的东西。我想我有一个使用约定的方法,但这很糟糕。我可能只是让布局的东西内联样式和所有其他类。这样我就可以控制面板中的类,并用html处理布局。谢谢你的回复!我希望避免这样的事情有两个原因。首先,我真的不喜欢在Java中应用这些类,因为这会破坏html的预览功能。我知道我可以在这两个地方应用这个类,但是我有重复的代码,可能会失去同步。其次,创建一个完整的Java类只是为了包装一个专门用于布局的CSS类,而困扰我的是布局部分,这看起来很冗长。这可能是一个在html中无法很好处理的问题,因为通常面板内容和布局管理器是分开的。