代码之家  ›  专栏  ›  技术社区  ›  Jonik

使用Wicket生成注释掉的内容

  •  7
  • Jonik  · 技术社区  · 15 年前

    出于调试的原因,我想在Wicket页面的HTML输出中包含一些信息,即 包含在HTML注释中 .

    输出将类似于…

    <!-- 
    <div wicket:id="foo"> 1234 </div>
    -->
    

    …其中“1234”是一些有趣的动态创建信息。

    我曾尝试过,但无济于事:

    • <!-- <div wicket:id="foo"></div> --> Wicket抱怨HTML页面中缺少ID为“foo”的元素
    • 附上 <wicket:remove> 此类节不能包含具有 wicket:id
    • label.setVisible(false) Wicket根本不输出标签
    • new Label("foo", "<!-- " + foo + " -->") 这个 < > 逃走

    那么,你能轻而易举地用柳条做这件事吗?还是我应该忘记它?

    3 回复  |  直到 15 年前
        1
  •  15
  •   Jonik    15 年前

    这个怎么样?

    class CommentOutModifier extends AbstractBehavior {
        private static final long serialVersionUID = 1L;
    
        @Override
        public void beforeRender(Component component) {
            component.getResponse().write("<!--");
        }
    
        @Override
        public void onRendered(Component component) {
          component.getResponse().write("-->");
        }
    }
    
    add(new Label("tohide", "Hi, can you see me?").add(new CommentOutModifier()));
    

    然后,放:

    <span wicket:id="tohide"></span>
    

    在您的标记中将产生:

    <!--<span>Hi, can you see me?</span>-->
    
        2
  •  2
  •   BjornS    15 年前
    Label l = new Label("foo", "<!-- " + foo + " -->");
    l.setEscapeModelStrings(false);
    

    它不漂亮,但它又快又容易。我还相信有一个特定的窗口设置(应用程序中的某个地方),您可以打开它来防止它删除注释,但我真的记不起在哪里看到它。

    编辑: 添加了评论工作者

    编辑2: 实现了EELCO的完整性行为。反正比我的方法好。

    public enum Comment {
    ;
        /**
         * creates a wicket comment (extends label
         */
        public static Label newComment(String id, String comment) {
            Label label = new Label(id, comment);
            label.add(commentBehaviour());
            return label;
        }
    
        /**
         * Adds &lt;!-- and --&gt around the component.
         */
        public static AbstractBehavior commentBehaviour() {
            return new AbstractBehavior() {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void beforeRender(Component component) {
                    component.getResponse().write("<!--");
                }
    
                @Override
                public void onRendered(Component component) {
                    component.getResponse().write("--!>");
                }
            };
        }
    }
    
    add(Comment.newComment("comment","Something worth commenting upon"));
    
        3
  •  1
  •   Tim    15 年前

    玩了一会儿,然后就开始了:

    Label label = new Label("commented", "Content") {
        @Override
        protected void onComponentTag(ComponentTag tag) {
            tag.setName("!--");
            super.onComponentTag(tag);
        }
    };
    add(label);
    

    但它并不漂亮…… <span wicket:id="commented">This will be replaced</span>
    变成: <!-- wicket:id="commented">Content</!-->

    但至少它不会干扰布局/css样式。