Как сделать текст, содержащий 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 &lt;b&gt;the bridge&lt;/b&gt; 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, что не является сюрпризом и не имеет большого значения; просто стоит отметить. Надеюсь, это поможет кому-то выполнить тот же поиск, что и я.

Другие вопросы по тегам