ZK列表框的forEach和动态@load

时间:2013-10-15 19:32:19

标签: java zk

我正在尝试在我的模板中生成可变数量的listbox es:

<listbox forEach="${vm.columns}" model="@load(vm.getData(each))">
    <listhead>
        <listheader label="column${each}" width="260px" />
    </listhead>
</listbox>

ViewModel(简化)看起来像这样:

public class MyViewModel {

    private static final int COLUMN_COUNT = 3;

    private List<Integer> columns = new ArrayList<>();

    @Init
    public void init() {
        for (int i = 0; i < COLUMN_COUNT; i++) {
            columns.add(i);
        }
    }

    public List<Integer> getColumns() {
        return columns;
    }

    public void setColumns(List<Integer> columns) {
        this.columns = columns;
    }

    public List<Picture> getData(Integer pos) {
        System.out.println("GET DATA = " + pos);
            // rest of the code ...
    }
}

因此生成部分工作正常,我可以看到生成了3个列表框,每个列中标题为“column0”,“column1”和“column3”。但是当我调查日志时,我发现getData方法被调用了3次,但始终使用参数= 0:

2013-10-15T21:16:55.758+0200|INFO: GET DATA = 0
2013-10-15T21:16:55.847+0200|INFO: GET DATA = 0
2013-10-15T21:16:55.849+0200|INFO: GET DATA = 0

也许有人可以解释,为什么在${each}中使用变量listheader可以正常工作,但不能在@load表达式中使用?

有没有办法解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以这样重写:

<vlayout children="@load(vm.columns)">
        <template name="children" var="lb">
            <listbox model="@load(vm.getData(lb))">
                <listhead>
                    <listheader label="@load('column'.concat(lb))" width="260px" />
                </listhead>
            </listbox>
        </template>
</vlayout>