Получить длину списка итераторов в руле Java

Java-код -

List<String> table = Lists.newArrayList();
........

Код шаблона -

 {{#each table}}
    <td height="28" width="27"><h1> {{table.length}}</h1></td>
    <td height="28" width="27"><h1> {{table.size}}</h1></td>
    <td height="28" width="27"><h1> {{table.count}}</h1></td>
    <td height="28" width="27"><h1> {{../../table.length}}</h1></td>
    <td height="28" width="27"><h1> {{../table.length}}</h1></td>
 {{/each}}

Я пытаюсь получить длину списка в шаблоне руля. Но все те строки, которые я пробовал выше, не работают! Мне интересно, где я делаю неправильно. Какой правильный способ получить длину итератора в руле Java?

Заранее спасибо!

2 ответа

Я думаю, что проблема в том, что size метод в списке не getSize() -- это просто size(), И по умолчанию Handlebars Java "[использует] методы JavaBean (т.е. общедоступные методы getXxx и isXxx) и Map в качестве преобразователей значений", поэтому такие методы, как size() не сработает

В основном вы хотите создать контекст, который включает в себя MethodValueResolver, который обрабатывает любой публичный метод.

Отсюда:

Context context = Context
    .newBuilder(model)
    .resolver(MethodValueResolver.INSTANCE)
    .build();

Кроме того, пример с несколькими определителями.


Или, поскольку MethodValueResolver является своего рода излишним, возможно, на самом деле лучше просто явно уменьшить длину, как вы упоминаете в своем комментарии.

Вот решение javascript/html. По сути, вам нужно получить длину за пределами {{#each}}...{{/each}}.

<!DOCTYPE html>
<html>
<head>
    <title>Page Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/2.0.0/handlebars.js"></script>
</head>
<body>

<script id="t" type="text/x-handlebars">
    <p>My table length is {{table.length}}</p>
    {{#each table}}
    <p>Stay for some {{a}} and {{b}}</p>
    {{/each}}
</script>

<script>
    Handlebars.registerHelper('testHelper', function(ignore, opt) {
        var results = '';
        data.forEach(function (item) {
            results += opt.fn(item);
        });
        return results;
    });

    var table = [
        { a: 'tea', b: 'cookie' },
        { a: 'coffee', b: 'cake' }
    ];
    var t = Handlebars.compile($('#t').html());
    $('body').append(t({ table: table }));
</script>
</body>
</html>

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