java - ZK - 数据更改后树不刷新

标签 java zk

我在使用 ZK6 的新树绑定(bind)机制进行模型绑定(bind)时遇到问题。 首先,这是我的代码:

祖尔:

<div id="win" apply="org.zkoss.bind.BindComposer"
viewModel="@id('vm') @init('mira.web.composer.PermissionDesignerModel')"
style="width:98%; text-align:center;" vflex="1">

<tree id="permissionTree" width="100%" model="@bind(vm.treeModel)"
    style="text-align:left;" vflex="2">
    <treecols>
        <treecol label="Item" width="400px" />
        <treecol label="Typ" />
        <treecol label="Ausgabe" />
        <treecol label="Einfügen" width="100px" />
    </treecols>
    <template name="model" var="node">
        <treeitem open="@bind(node.open)">
            <treerow>
                <treecell>
                    <textbox value="@bind(node.data.name)" />
                </treecell>
                <treecell>
                    <combobox mold="rounded" readonly="true"
                        model="@load(vm.allAttributeTypes)"
                        selectedIndex="@bind(node.data.attType)">
                        <template name="model">
                            <comboitem label="@load(each.name)"
                                value="@load(each.id)" />
                        </template>
                    </combobox>
                </treecell>
                <treecell>
                    <checkbox label="Ausgabe"
                        checked="@bind(node.data.isOutput)" />
                </treecell>
                <treecell>
                    <button label="Einfügen"
                        onClick="@command('insertNode', node=node)" />
                </treecell>
            </treerow>
        </treeitem>
    </template>
</tree>

型号:

public class PermissionDesignerModel {

ClassPathResource res = new ClassPathResource("/beans.xml");
BeanFactory beanFactory = new XmlBeanFactory(res);
private PermissionTreeModel treeModel;

@Command
public void insertNode(@BindingParam("node") PermissionTreeNode node) {
    node.setOpen(false);
}


public PermissionTreeModel getTreeModel() throws ParseException {
    if (treeModel == null) {
        PermissiontreeBuilder builder = new PermissiontreeBuilder(Container
                .getCurrentProduct().getProductId());
        PermissionTreeNode root = builder.getRoot();
        setTreeModel(new PermissionTreeModel(root));
    }
    return treeModel;
}

public void setTreeModel(PermissionTreeModel treeModel) {
    this.treeModel = treeModel;
}

}

正确调用了 insertNode() 方法,并且我获得了包含内容的相应节点,但是当我更改节点的数据(或开放属性)时,UI 中没有任何反应。我是否必须调用一些特殊的 bind() 方法或其他方法才能使模型更改在树中生效?

最佳答案

好吧,我找到了答案:您必须手动通知 UI 进行更改(对于每个变量)。

@NotifyChange({ "treeModel" })
@Command
public void insertNode(@BindingParam("node") PermissionTreeNode node) {
    PermissionTreeNode addNode = node;
    if(node.getChildren() == null) {
        PermissionItem item = node.getData();
        PermissionTreeNode parent = (PermissionTreeNode) node.getParent();
        int index = parent.getIndex(node);
        parent.remove(node);
        addNode = new PermissionTreeNode(item, new ArrayList<PermissionTreeNode>());
        parent.insert(addNode, index);
    }
    addNode.add(new PermissionTreeNode(new PermissionItem()));
}

在 NotifyChange 中添加方法中要更改的变量。

关于java - ZK - 数据更改后树不刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11520433/

相关文章:

refresh - ZK服务器结构中是否有与setInterval等效的东西?

java - ListView不想刷新

java - 如何设置 Zk Sessions (org.zkoss.zk.ui),以便我可以对扩展 GenericForwardComposer 的 Controller 类进行单元测试

java - ZK 主题和 IE 行为 (.htc) 内容类型的问题

java - 包是否必须与 java 文件所在的子目录相匹配?

java - 通过单击菜单项刷新页面

zk - 使用 zkoss,为什么我的 Spring DAO 仍然为 null,即使我已经在 Spring 配置 XML 中设置了它?

java - 树遍历

java - DialogFragment.show 挂起应用程序

java - 在 Java 中使用 Switch 根据年龄组生成随机出生日期