如果有一个方法需要返回多个标签,如何使用j2html?

时间:2018-01-24 11:08:59

标签: j2html

如果有一个需要返回多个标签的方法,如何使用 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并在调用方法中自己包装,但是我不能只返回两个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返回类型?

1 个答案:

答案 0 :(得分: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>