Как сделать текст, содержащий html с j2html java, в html lib
Я использовал j2html для создания HTML из Java, работает хорошо, но я не понимаю, как использовать, когда я хочу что-то подобное
<p>The fox ran over the <b>Bridge</b> in the forest</p>
Если я сделаю
import static j2html.TagCreator.*;
public class HtmlTest
{
public static void main(String[] args)
{
System.out.println(p("The fox ran over the " + b(" the bridge") + "in the forest"));
}
}
я получил
<p>The fox ran over the <b>the bridge</b> in the forest</p>
то есть он рассматривает жирный шрифт как просто текст.
Обратите внимание, просто делать
import static j2html.TagCreator.*;
public class HtmlTest
{
public static void main(String[] args)
{
System.out.println(p(b("the bridge")));
}
}
действительно делает правильно, давая
<p><b>the bridge</b></p>
2 ответа
Я никогда не использовал j2html, но, глядя на пример, если я не ошибаюсь, я предполагаю, что синтаксис должен быть:
p("The fox ran over the ", b(" the bridge"), "in the forest")
Извините, среда моей компании не позволяет мне загружать Eclipse и т. Д. Для тестирования...Обновление: выше было неправильно. Но я нашел способ - хотя он довольно сложный:
p("The fox ran over the ").with((DomContent)b("the bridge")).withText(" in the forest")
Выход:
<p>The fox ran over the <b>the bridge</b> in the forest</p>
(DomContent)
могут быть удалены, но я оставил для уточнения. Я предполагаю, что логика заключается в том, что если что-либо добавленное в виде текста будет экранировано, то единственный способ заставить это работать - добавить DomContent
или же ContainerTag
вместо.
Обновление 2: "Лучший" способ найден!
p(new Text("The fox ran over the "), b("the bridge"), new Text(" in the forest"))
или с "помощником"
import static j2html.TagCreator.*;
import j2html.tags.Text;
public class Test {
private static Text $(String str) {
return new Text(str);
}
public static void main(String[] args) {
System.out.println(p($("The fox ran over the "), b("the bridge"), $(" in the forest")));
}
}
<p>The fox ran over the <b>Bridge</b> in the forest</p>
можно записать как
p(join("The fox ran over the", b("Bridge"), "in the forest")
Я отправляю этот ответ, потому что это был один из первых результатов, которые я обнаружил, когда искал "j2html insert html"; по сути, я хотел вставить HTML-текст в файл, который я создаю с помощью j2html. Оказываетсяj2html.TagCreator#join
может также присоединяться к тексту, не экранируя его, поэтому следующее:
System.out.println(html(body(join("<p>This is a test</p>"))).render());
System.out.println(html(body(join("<p>This is a test</p><p>Another Test</p>"))).renderFormatted());
System.out.println(html(body(p("This is a test"), p("Another Test"))).renderFormatted());
Выводит следующее:
<html><body><p>This is a test</p></body></html>
<html>
<body>
<p>This is a test</p><p>Another Test</p>
</body>
</html>
<html>
<body>
<p>
This is a test
</p>
<p>
Another Test
</p>
</body>
</html>
Обратите внимание, что renderFormat
метод не отображает объединенный HTML, что не является сюрпризом и не имеет большого значения; просто стоит отметить. Надеюсь, это поможет кому-то выполнить тот же поиск, что и я.