3.5.1.1.2. 界面控制器方法
本章节我们介绍一些界面控制器基类的方法,可以直接在代码中调用或者重写。
- 所有界面都可用的方法
-
-
show()
- 展示界面。该方法通常在创建界面之后调用,参阅 打开界面。 -
close()
- 关闭界面,使用StandardOutcome
枚举参数或者CloseAction
对象。示例:@Subscribe("closeBtn") public void onCloseBtnClick(Button.ClickEvent event) { close(StandardOutcome.CLOSE); }
参数值也传递至 BeforeCloseEvent 和 AfterCloseEvent 事件中,因此可以在事件监听器中也能获取界面关闭的原因。参阅 界面关闭后执行代码以及返回值 了解更多使用这些监听器的方法。
-
getScreenData()
- 返回ScreenData
对象,该对象作为所有在界面 XML 描述中定义的 数据组件 的寄存器,因此可以使用loadAll()
方法为界面加载数据:@Subscribe public void onBeforeShow(BeforeShowEvent event) { getScreenData().loadAll(); }
-
getSettings()
- 返回Settings
对象,可以读写当前用户对界面的自定义设置。 -
saveSettings()
- 保存Settings
对象中的设置。如果 cuba.gui.manualScreenSettingsSaving 设置为 false(默认值),则会自动调用该方法。
-
- StandardEditor 的方法
-
-
getEditedEntity()
- 当界面展示时,返回编辑实体的实例。实例是 @EditedEntityContainer 注解内指定的数据容器中的实例。在 InitEvent 和 AfterInitEvent 事件监听器内,该方法会返回 null。在 BeforeShowEvent 事件监听器内,该方法会返回传递给界面用来编辑的实体,之后在界面打开的过程中,实体会重新加载,一个不同的实例会设置给数据容器。
可以用下面的方法关闭编辑界面:
-
closeWithCommit()
- 验证并保存数据,然后用StandardOutcome.COMMIT
关闭界面。 -
closeWithDiscard()
- 忽略任何未保存的数据并用StandardOutcome.DISCARD
关闭界面。
如果界面的 DataContext 有未保存的改动,则会在界面关闭前弹出对应的消息对话框。可以用 cuba.gui.useSaveConfirmation 应用程序属性调整通知类型。如果用
closeWithDiscard()
或close(StandardOutcome.DISCARD)
方法,则会忽略未保存的改动而且没有通知。-
commitChanges()
- 保存数据,但不关闭界面。可以从自定义事件监听器调用该方法或者重写默认的windowCommit
操作监听器,这样能在数据保存后做一些其他的事情,示例:@Override protected void commit(Action.ActionPerformedEvent event) { commitChanges().then(() -> { // this flag is used for returning correct outcome on subsequent screen closing commitActionPerformed = true; // perform actions after the data has been saved }); }
commit()
方法的默认实现展示成功提交的通知消息。可以在界面初始化过程中用setShowSaveNotification(false)
方法关闭。 -
重写
validateAdditionalRules()
方法为保存数据前添加额外的数据验证。方法应该在传入的ValidationErrors
对象中保存验证错误的信息。之后,此信息会与标准验证的错误信息一起展示。示例:
private Pattern pattern = Pattern.compile("\\d"); @Override protected void validateAdditionalRules(ValidationErrors errors) { if (getEditedEntity().getAddress().getCity() != null) { if (pattern.matcher(getEditedEntity().getAddress().getCity()).find()) { errors.add("City name cannot contain digits"); } } super.validateAdditionalRules(errors); }
-
- MasterDetailScreen 的方法
-
-
getEditedEntity()
- 当界面在编辑模式时,返回正在编辑的实体实例。即设置在form
组件数据容器中的实例。如果界面不在编辑模式,此方法会抛出IllegalStateException
。 -
重写
validateAdditionalRules()
方法可以添加额外的数据验证,与上面StandardEditor
介绍的一样。
-