如何更改wicket linktree节点的颜色?

时间:2012-11-06 13:35:35

标签: wicket

我们正在使用wicket LinkTree。一旦在页面上构造和呈现树,我们就可以在应用程序中动态地将新节点添加到树中。添加新节点时,我们希望使用不同的颜色(例如红色)显示新添加的节点。

我们采取的一种方法(但没有奏效)如下。我们扩展LinkTree类并覆盖newNodeComponent方法,如下所示。

@Override
protected Component newNodeComponent(String id, IModel<Object> model) {
    return new LinkIconPanel(id, model, TalepTreeForTTBina.this) {
        private static final long serialVersionUID = 4518741854057038753L;

        @Override
        protected void onNodeLinkClicked(Object node, BaseTree tree, AjaxRequestTarget target)
        { . . . . . . 

然后我们将一个html属性(类)添加到此LinkIconPanel事物中。之后,我们的计划是编写一个jquery函数来查看树上的那个类,然后改变&lt;的颜色。 td&gt; (或实际上是&lt; span&gt;)标记,其中显示了文本。但是,我们得到的最终标记如下:

< td class="myClass" . . . .>
  < wicket:panel ....>
    < table . . . >
      < tbody . . . >
        < tr . . . >
          < td . . . >
            < a ...>
              < span > my text that I want to change the color < /span >

我可以访问最外面的td标记(在上面的顶部),但是无法访问我的Java Wicket代码中的内部标记。所以我只是从wicket代码中插入myClass到最外层的td标签,并希望从客户端的jquery端处理颜色。看起来(从我的css代码)我无法达到&lt;表&gt;来自jquery(或css)的标记,因为有一个&lt;检票口:面板&gt;介于两者之间。

所以我的问题是: 1.有更好的方法来更改LinkTree节点的颜色吗? 如果这是我应该去的方式,我怎么能达到那个&lt; span&gt;来自CSS的标签?我不能使用RenderBodyOnly(true)因为我没有在我的代码中手动添加树节点而我无法访问节点(要添加为节点的项目)。 LinkTree为我做到了。

我很感激任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

我使用SimpleAttributeModifier来修改我的html标记中的css,如下所示:

example.css:

span.new-yellow { background: #dadada; color: #dddd55 }

example.java:

SimpleAttributeModifier sam = new SimpleAttributeModifier("class", ".alt-yellow");
if(node.) {
    exampleComponent.add(sam);
}

也许您可以在节点上创建一个模型来表明它是“new”并在这种情况下添加SimpleAttributeModifier?

另一种选择可能是使用HeaderContributor来执行以下操作:

        add(new HeaderContributor(new IHeaderContributor() {
            public void renderHead(IHeaderResponse response) {
                response.renderOnLoadJavascript("document.getElementById('" + node.getMarkupId() + "').YOUR_JAVASCRIPT_HERE");
            }
        }));

第二个想法,那可能不是Ajax友好的。无论如何,只是一些想法。祝你好运!

答案 1 :(得分:0)

重写LinkIconPanel的newContentComponent方法。提供一个新的Label但覆盖其onComponentTag方法,添加class属性和值。

@Override
protected Component newContentComponent(String componentId, BaseTree tree,
        IModel<?> model) 
{       
    return new Label(componentId, model)
    {
        @Override
        protected void onComponentTag(ComponentTag tag) 
        {
            tag.put("class", "colourMe");
            super.onComponentTag(tag);
        }
    };
}

这会将class属性添加到span标记并像这样呈现html:

< a >
       < span class="colourMe"> my text that I want to change the color < /span >
</ a >

不需要jquery,您只需使用class属性为文本着色。