Binding ZK:Listbox未绑定SelectedItem的自定义组件

Binding ZK:Listbox未绑定SelectedItem的自定义组件,binding,listbox,annotations,custom-controls,zk,Binding,Listbox,Annotations,Custom Controls,Zk,我正在创建新的自定义组件,无法将控制器的属性绑定到自定义组件的SelectedItem注释属性。我的想法是,任何通过我的自定义组件SelectedItem注释的人,我都应该能够在我的组件中检索它,并将其分配给ListBox的SelectedItem属性。这将为我的组件的用户提供灵活性,使他们不必担心组件的内部结构,组件将是可重用的 问题是我无法在自定义组件中获取/设置控制器值。我得到空值。有人能帮我解决这个问题或给我指出正确的方向吗?代码如下: <bandbox id="filterDro

我正在创建新的自定义组件,无法将控制器的属性绑定到自定义组件的SelectedItem注释属性。我的想法是,任何通过我的自定义组件SelectedItem注释的人,我都应该能够在我的组件中检索它,并将其分配给ListBox的SelectedItem属性。这将为我的组件的用户提供灵活性,使他们不必担心组件的内部结构,组件将是可重用的

问题是我无法在自定义组件中获取/设置控制器值。我得到空值。有人能帮我解决这个问题或给我指出正确的方向吗?代码如下:

<bandbox id="filterDropdownBandBox" instant="true" readonly="false">
<bandpopup id="filterDropdownBandPopup" style="max-height:250px;overflow-x:hidden">
    <listbox id="listBox" hflex="1" rows="0" >
         <template name="model">
             <listitem>
                 <listcell label="${each.label}" />
             </listitem>
         </template>
     </listbox>
</bandpopup>

public类FilterDropdown扩展Div实现IdSpace{
@电线
私有列表框列表框;
@电线
专用带弹出过滤器下拉带弹出;
@电线
专用带盒过滤器下拉带盒;
私有列表模型;
公共筛选器下拉列表(){
createComponents(“/filterDropdown.zul”,this,null);
选择器。wireComponents(此,此,false);
选择器。wireEventListeners(这个,这个);
}
public void setSelectedItem(Listitem l)//此处为NULL
{
l、 setParent(列表框);
listBox.setSelectedItem(l);
}
公共void saveSelection(){
getSelectedItem();
}
公共列表项getSelectedItem(){
返回listBox.getSelectedItem();
}
}
这就是我如何将这个组件添加到lang-addon.xml文件中的

<component>
    <component-name>filter-dropdown</component-name>
    <extends>div</extends>
    <component-class>com.components.FilterDropdown</component-class>
    <annotation>
        <annotation-name>DDBIND</annotation-name>
        <property-name>selectedItem</property-name>
        <attribute>
            <attribute-name>ACCESS</attribute-name>
            <attribute-value>both</attribute-value>
        </attribute>
    </annotation>
</component>

过滤器下拉列表
div
com.components.FilterDropdown
DDBIND
选择项
通道
二者都
这就是我在其他ZUL文件中使用自定义组件的方式

 <filter-dropdown id="filterProjDropdown" selectedItem="@DDBIND{XYZCtrl.bean.propbean.actualProp}"/>

首先,保持常规注释,如
@load()
@save()
@bind
()`。

现在,我的第一个建议是扔掉你的zul。
在组件中实现
AfterCompose
接口,并使用渲染器在其中添加所有项目。
它使任何人都可以更轻松地更改该组件,从而提高性能。

其次,在类中使用正确的注释:

@ComponentAnnotation({"selectedItem:@ZKBIND(ACCESS=both,SAVE_EVENT=onSelect)"}) 
如下所示,您的lang-addon.xml应该如下所示:

<component> 
     <component-name>filter-dropdown</component-name> 
     <extends>div</extends> 
     <component-class>com.components.FilterDropdown</component-class> 
</component> 
您应该在连接到bandbox的eventlistener中处理此问题。

如果您想要一个高级的工作组件代码,包括如何将其导出到一个单独的jar中,请查看

<component> 
     <component-name>filter-dropdown</component-name> 
     <extends>div</extends> 
     <component-class>com.components.FilterDropdown</component-class> 
</component> 
Events.postEvent("onSelect", FilterDropdown.this, selectedItems);