3

当有一个需要返回多个标签的方法时如何使用j2html ?

所以在这里我有一个可重用的方法,它为特定选项构造一个标签和输入字段。标签放在 td 中,输入字段放在另一个 td 字段中,都在 tr 中,然后返回 tr。

从逻辑上讲,这只是一件事(用户输入),因此在单个方法中使用而不是在标签和输入中使用单独的方法是有意义的。这适用于我的网页,其中我有一系列行,每行都包含标签和输入字段,所有行都在表格中很好地排列。(来自 Java 背景,我认为使用 table 只是一个布局管理器,然后尝试完全使用 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() 中返回它们,因为 tr() 中不允许 span()。

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 返回类型?

4

1 回答 1

2

我花了一段时间为此玩不同的解决方案。我能想到的最简单的是:

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>
于 2018-01-25T12:27:27.810 回答