Как использовать 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>