如何在删除实体之前做判断,防止误删

奇怪为什么 RemoveAction 里有 afterActionPerformedHandler事件,却没有 beforeActionPerformedHandler 事件呢?不然就可以通过 @Install 处理了。

你好,我查了一下,确实没有了。但是现在可以这么实现:

@Named("treeNodesTable.remove")
private RemoveAction<TreeNode> treeNodesTableRemove;
@Autowired
private GroupTable<TreeNode> treeNodesTable;

@Subscribe
public void onAfterShow(AfterShowEvent event) {
    // 假设只有 name=1114 的那行能删除
    treeNodesTableRemove.addEnabledRule(()-> treeNodesTable.getSelected().iterator().hasNext() &&
            treeNodesTable.getSelected().iterator().next().getName().equals("1114"));
}

实现效果:
transform

1 个赞

是的,可以控制按钮来实现 :+1:

又是只做一半 :joy:
image
控制显隐却没有这个添加规则可用

什么意思?

image

现在是通过表格 onTableSelectEventSelection事件来单独设置编辑和显隐的

image

针对特定数据的权限,其实推荐用 行级角色 :: Jmix 文档 中的断言策略来做。

这个应该是有意为之,否则一个按钮的显示与否会导致整个 button panel 展示按钮的数量变化,用户用起来会觉得按钮跳来跳去。

另外,你上面那段代码可以简化:

boolean hasSomething = event.getSelected().stream().filter(...).count() > 0

tenantsTableEdit.setVisible (!hasSomething);
tenantsTableView.setVisible (hasSomething); 
tenantsTableEdit.setEnabled (!hasSomething);
tenantsTableRemove.setEnabled (!hasSomething);
1 个赞

:handshake:

对头, > 0 也可用 anyMatchnoneMatch

1 个赞