防止选择SmartGWT IPickTreeItem的某些值

时间:2012-05-02 10:48:15

标签: java gwt smartgwt

我正在尝试清除 IPickTreeItem 上用户选择的值。

这是我发现限制用户选择某些树根值(不是全部)的唯一解决方案。

更清楚的是,调用event.cancel()似乎不会阻止事件冒泡。

我做错了吗?

TreeNode treenode = new TreeNode("root", new TreeNode("Operation A"),
new TreeNode("Operation B"));

final DynamicForm dynamicForm = new DynamicForm();

Tree tree = new Tree();
tree.setRoot(treenode);

final IPickTreeItem pickTreeItem = new IPickTreeItem();
pickTreeItem.setValueTree(tree);
pickTreeItem.addChangeHandler(new ChangeHandler()
{
    @Override
    public void onChange(ChangeEvent event)
    {
        pickTreeItem.clearValue() // Not clearing the value
        pickTreeItem.setValue((String)null) // Not working neither
        event.cancel() // Not seeming to work...
    }
});

dynamicForm.setItems(pickTreeItem);
dynamicForm.draw();

无效

pickTreeItem.setInputTransformer(new FormItemInputTransformer()
{

    @Override
    public Object transformInput(DynamicForm form, FormItem item,
    Object value, Object oldValue)
    {
        return "Desired New Value (not working)...";
    }
});

这很奇怪,因为使用外部按钮清除值(在picktreeitem处理程序之外)

Button bt = new Button("click");
bt.addClickHandler(new ClickHandler()
{
    @Override
    public void onClick(ClickEvent event)
    {
        pickTreeItem.setValue((Object) null);
    }
});

预期行为

我的树:

-aaaa
---- BBBB
---- CCCC
-dddd
---- EEEE
---- FFFF

如果用户选择“aaaa”,则应将PickTreeItem值恢复为defaultValue(“选择值”),可选择通知用户他不能选择“aaaa”。

PickTreeItem应接受“dddd”作为有效的选择值。

2 个答案:

答案 0 :(得分:1)

与所有FormItems一样, event.cancel()是禁止更改的正确方法。有一个框架级别的错误阻止了这种行为正确,现在已经得到纠正。

请参阅this thread on the Isomorphic forums

答案 1 :(得分:0)

我理解它与您要实现的目标不完全相同,但是您可以考虑定义一个CustomValidator,它读取所选值并返回false和适当的消息,当其中一个父值不应该'被选中。为此,您必须设置pickTreeItem.setCanSelectParentItems(Boolean.TRUE),以允许选择父项,并选择pickTreeItem.setValidateOnChange(Boolean.TRUE),以便在选择时验证所选值。