Если то, что вы хотите визуализировать, невелико или уже представлено в виде строки, метка будет работать хорошо, просто вызовите label.setEscapeModelStrings(false);
, чтобы убедиться, что она печатает строку как есть.
Но если ваш HTML-контент генерируется динамически или читается из InputStream / Reader и вы не хотите хранить его в памяти, вы можете напрямую использовать WebComponent и переопределить метод onComponentTagBody()
. Таким образом, вы пишете непосредственно в ответ, вместо того, чтобы заполнять буфер в памяти, преобразовывать его в строку и затем затем записывать в ответ (что происходит, если вы используете метку).
Пример кода, для обоих случаев:
HomePage.java
public class HomePage extends WebPage {
public HomePage() {
add(new Label("label", "<ul><li>test</li><li>test</li><li>test</li><li>test</li><li>test</li></ul>")
.setEscapeModelStrings(false));
add(new WebComponent("html") {
@Override
protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) {
Response response = getRequestCycle().getResponse();
response.write("<ul>");
for (int i = 0; i < 5; i++)
response.write("<li>test</li>");
response.write("</ul>");
}
});
}
}
homepage.html
<html xmlns:wicket="http://wicket.apache.org">
<body>
<h2>Label</h2>
<div wicket:id="label"></div>
<h2>WebComponent</h2>
<div wicket:id="html"></div>
</body>
</html>