Создание закомментированного контента с помощью Wicket - PullRequest
7 голосов
/ 14 октября 2010

По причинам отладки и по какой-то причине я хотел бы включить определенную информацию в вывод HTML страницы Wicket, которая заключена в комментарии HTML .

Вывод будет что-то вроде ...

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

... где «1234» - это интересная, динамически создаваемая часть информации.

Я пытался, но безрезультатно:

  • <!-- <div wicket:id="foo"></div> --> → Wicket жалуется, что элемент с идентификатором "foo" отсутствует на странице HTML
  • заключить в <wicket:remove> → такие разделы не могут содержать элементы с wicket:id
  • label.setVisible(false) → Wicket вообще не выводит ярлык
  • new Label("foo", "<!-- " + foo + " -->")< и > экранируются

Итак, вы можете сделать это с помощью Wicket (легко), или я должен просто забыть об этом?

Ответы [ 3 ]

15 голосов
/ 16 октября 2010

Как насчет этого?

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 голосов
/ 14 октября 2010
Label l = new Label("foo", "<!-- " + foo + " -->");
l.setEscapeModelStrings(false);

Это не красиво, но быстро и легко.Я также считаю, что есть особая настройка калитки (где-то в приложении), которую вы можете включить, чтобы запретить удаление комментариев, но я, честно говоря, не могу вспомнить, где я ее увидел.

Редактировать: Добавлен комментарий работника

Edit2: Реализовано поведение 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"));
1 голос
/ 14 октября 2010

Немного поиграл и добрался до этого:

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.

...