Как использовать j2html, когда есть метод, который должен возвращать несколько тегов?

Как использовать j2html, когда есть метод, который должен возвращать несколько тегов?

Поэтому здесь у меня есть метод многократного использования, который создает метку и поле ввода для определенной опции. Метка помещается внутри td, а поле ввода - в другое поле td, все в пределах tr, и tr возвращается.

Логически это всего лишь одна вещь (пользовательский ввод), поэтому имеет смысл иметь внутри одного метода, а не отдельный метод для метки и ввода. Это хорошо работает для моих веб-страниц, где у меня есть ряд строк, каждая из которых содержит метку и поле ввода, все строки хорошо расположены в таблице. (Исходя из фона Java, я вижу использование таблицы в качестве простого менеджера макета и более разумный подход, чем попытка использовать полностью CSS)

public Tag addInputTextTr(UserOption userOption, String value, String className)
{
    return tr(
            td(label(userOption.getLabelMsg())
                    .withTitle(userOption.getTooltipMsg())),
            td(input()
                    .withType(Html.TEXT)
                    .withName(userOption.getOption()).withValue(value)
                    .withClass(className)
            )
    );
}

Телефонный код

addInputTextTr(UserOption.LICENSE_GUID1, licenseGuid1, LICENSE_INPUTFIELD_CLASS)

Моя проблема в том, что иногда мне нужны три ячейки таблицы, чтобы я мог добавить кнопку в конце строки. Таким образом, чтобы учесть это, я должен просто вернуть tds из этой функции и обернуть себя в tr в вызывающем методе, но я не могу просто вернуть два tds, если я не заключил в список, тогда это означает, что я должен использовать each() в вызывающем коде что усложняет это. Я не могу вернуть их в span(), так как span() не допускается в tr().

public List<Tag> addInputTextTds(UserOption userOption, String value, String className)
    {
        List<Tag> tds = new ArrayList<>();
        tds.add(
            td(label(userOption.getLabelMsg())
                    .withTitle(userOption.getTooltipMsg())));
        tds.add(
            td(input()
                    .withType(Html.TEXT)
                    .withName(userOption.getOption()).withValue(value)
                    .withClass(className)
            )
        );
        return tds;
    }

Телефонный код сейчас

tr(
   each(addInputTextTds(UserOption.LICENSE_EMAIL, licenseEmail, LICENSE_INPUTFIELD_CLASS),
           next -> next
   )
),

Я искал тип возвращаемого j2html, который можно было бы использовать для хранения нескольких элементов?

1 ответ

Решение

Я провел некоторое время, играя в разные решения для этого. Самое простое, что мне удалось придумать, это:

public static void main(String[] args) {
    String html =
        html(
          body(
            ul(
              makeSomeChildren()
            )
          )
        ).renderFormatted();
}

private static DomContent makeSomeChildren() {
    return join(b("Child 1"), b("Child 2"));
}

который производит:

<html>
    <body>
        <ul>
            <b>Child 1</b><b>Child 2</b>
        </ul>
    </body>
</html>
Другие вопросы по тегам