编辑或删除时,改写实体的字段值使用哪些handler?是否有相关在线的文档?
你好,能详细说一下吗?不是很懂你想要什么handler?
比如删除某条数据,我采用编码方式修改某个字段的值
你好,我写了个简单的例子:
- 实体
Order
,带有isDel
字段表示是否删除:@JmixEntity @Table(name = "DEMO_ORDER") @Entity(name = "demo_Order") public class Order implements HasDelFlag { @JmixGeneratedValue @Column(name = "ID", nullable = false) @Id private UUID id; @InstanceName @Column(name = "NAME") private String name; @Column(name = "IS_DEL") private Boolean isDel = false; public String getName() { return name; } public void setName(String name) { this.name = name; } public Boolean getIsDel() { return isDel; } public void setIsDel(Boolean isDel) { this.isDel = isDel; } public UUID getId() { return id; } public void setId(UUID id) { this.id = id; } }
- 列表界面中,修改数据加载器,仅加载未删除的数据:
<data readOnly="true"> <collection id="ordersDc" class="com.company.demo.entity.Order"> <fetchPlan extends="_base"/> <loader id="ordersDl"> <query> <![CDATA[select e from demo_Order e where e.isDel=false]]> </query> </loader> </collection>
- 列表界面中,修改表格的
RemoveAction
,去掉type
属性,并添加caption
属性:<groupTable id="ordersTable" width="100%" dataContainer="ordersDc"> <actions> <action id="create" type="create"/> <action id="edit" type="edit"/> <action id="remove" caption="删除"/> </actions> ...
- 在界面控制器中,添加下列代码:
@Autowired protected Dialogs dialogs; @Autowired private GroupTable<Order> ordersTable; @Autowired private DataManager dataManager; @Autowired private CollectionLoader<Order> ordersDl; @Subscribe("ordersTable.remove") public void onOrdersTableRemove(Action.ActionPerformedEvent event) { // 获取表格中选中的数据 var orders = ordersTable.getSelected(); if (orders.isEmpty()) { return; } dialogs.createOptionDialog() .withCaption("删除数据") .withMessage("请确认要删除 " + orders.size() + " 条数据") .withActions( // 用户点击确认标记删除 new DialogAction(DialogAction.Type.OK) .withHandler(e -> markDataAsRemoved(orders) ), new DialogAction(DialogAction.Type.CANCEL)) .show(); } private void markDataAsRemoved(Set<Order> orders) { // 用 setDiscardSaved(true) 提高效率。 var context = new SaveContext().setDiscardSaved(true); orders.forEach(o->{ o.setIsDel(true); context.saving(o); }); // 同时保存多个 dataManager.save(context); // 最后,重新加载表格数据 ordersDl.load(); }
感谢感谢