Каков наилучший способ сделать цикл в ISML без повторяемого объекта?

Я хочу сделать цикл в моем шаблоне ISML без повторяемого объекта. Во время выполнения этого шаблона будет определено условие или, скорее, количество итераций. Есть ли возможность иметь состояние цикла как в java "for (int i = 0; i < 5; i++)", но без сложного кода Java?

1 ответ

Я считаю, что нет действительно элегантного способа. Это потому, что такие расчеты не относятся к слою вида. Это верно не только для ISML, но и для других шаблонизаторов, например Thymeleaf. Смотрите здесь.

ISLOOP требуется один из следующих стандартных экземпляров Java в iterator:

java.util.Enumeration
java.util.Iterator
java.util.Collection

Например:

<isloop iterator="products" alias="product" counter="c">

</isloop>

Поток управления в контуре может быть изменен с isbreak а также isnext:

<isloop
iterator = "{ISML variable identifier}"
[ alias = "{simple name}" ]
[ counter = "{counter name}" ]
>
... some HTML and ISML code ...
[<isnext>]
[<isbreak>]
</isloop>

Если вам действительно нужно, вы можете создать, например, свой собственный итератор, такой простой, как этот, и поместить его в словарь конвейера из конвейера или модуля ISML:

class MyIterator implements Iterator<Integer>
{
    private final int max;
    private int current;

    MyIterator(int max)
    {
        this.max = max;
    }

    @Override
    public boolean hasNext()
    {
        return current < max;
    }

    @Override
    public Integer next()
    {
        return current++;
    }
}

Вы также можете использовать простой JSP-скриптлет, встроенный в модуль ISML, ISML и т. Д. Если вам нужен более конкретный ответ, предоставьте больше контекста в своем вопросе.

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