Zk Macrocomponent列表框渲染

时间:2017-07-10 19:22:16

标签: java listbox zk zk-grid

你好,我有一个像这样的宏组件。

<listbox id="results">
   <listitem id='listitem' self="@{each=d}">
        <listcell label='@{d.column1}'/>
        <listcell label='@{d.column2}'/>
        <listcell label='@{d.column3}'/>  
        <listcell label='@{d.column4}'/>
   </listitem>
</listbox>

我使用BindingListModelList将set model设置为常规列表框。

列表框是渲染但只有1列,并显示适配器的toString方法。

final List<Students>students = ...........
results.setModel(new BindingListModelList<>(students,false));

然后显示Student类的toString()方法。

我试过这个语法

<listitem id='listitem' self="@{each=${arg.includer.adapters}}">
    <listcell label='${arg.includer.adapters[self.columIndex].column1}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column2}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column3}'/>
    <listcell label='${arg.includer.adapters[self.columIndex].column4}'/>
</listitem>

HTMLMacroComponent类有一个方法getAdapters,返回要显示的数据。

public class StudentDetail extends HtmlMacroComponent{
public List<Students>getAdapters(){
    return adapters;
}
}

但我无法让它发挥作用!看到在使用新的Listbox()创建列表框时没有itemRender,并且不设置itemRender ..

请帮助我。

2 个答案:

答案 0 :(得分:1)

据我所知,问题是你的zul只是添加一个 listitem (即1,只有1个listitem),而不是模板告诉列表框如何渲染模型。 (至少从你的代码片段我假设你想要使用模板。如果我误解了你,请告诉我。)

您的代码所做的是:解析zul以构建组件,从而创建您在那里定义的1个列表项。然后它设置模型,删除所有现有的列表项(即您在zul中创建的列表项),并使用itemrenderer或提供的模板呈现模型值。正如您未提供的那样,它默认只使用toString()呈现一列。

试试这样:

<listbox>
    <template name="model">
        <listitem>
            <listcell label="${each.column1}"/>
            <listcell label="${each.column2}"/>
            <listcell label="${each.column3}"/>  
            <listcell label="${each.column4}"/>
       </listitem>
    </template>
</listbox>

您可以在此处阅读有关模板的信息:https://www.zkoss.org/wiki/ZK_Developer%27s_Reference/MVC/View/Template/Listbox_Template

或者,您可以使用Listbox.setItemRenderer()来使用基于Java的渲染器而不是模板。

请注意,你在这里混淆了一些zk的东西:

  • @仅用于数据绑定。如果你想使用zk表达式语言(大括号的东西),它以$
  • 开头
  • self在zul中不是一个好的变量名,因为当你想在zul的听众中引用它时,它已经引用了组件本身。
  • 提供listitems ID只有在获得不同的ID时才有意义,并且您知道这些ID。通常,在使用模型(即动态数据)时,ID不会帮助您。

答案 1 :(得分:1)

在ZK论坛上提出并回答了同样的问题:

http://forum.zkoss.org/question/105543/zk-653-listbox-macrocomponent/