ScreenFacet
基本用法
下面例子中,当 openDialogAction
执行时,会以对话框的方式打开 uiex1_Customer.browse
界面:
<actions>
<action id="openDialogAction"
caption="Open a screen as modal dialog"/>
</actions>
<facets>
<screen id="actionScreenFacet"
openMode="DIALOG"
screenId="uiex1_Customer.browse"
onAction="openDialogAction">
</screen>
</facets>
ScreenFacet
在界面 XML 描述的 facets
元素中定义,有下列属性:
-
screenId
- 指定需要打开的界面 id。
-
screenClass
- 指定需要打开的界面控制器 Java 类。
-
openMode
- 界面打开模式,支持下列值:-
NEW_TAB
- 在主窗口的新标签页打开界面。默认值。 -
THIS_TAB
- 在当前标签页的界面栈顶打开界面。 -
DIALOG
- 以模态框的形式打开界面。 -
ROOT
- 在主窗口打开界面。
-
-
onAction
- 定义一个 action 的 id,用于打开界面。
另外,也支持通过 ScreenFacet.show()
方法打开界面:
@Autowired
private ScreenFacet<Screen> screenFacet;
@Subscribe("btn")
public void onBtnClick(Button.ClickEvent event) {
screenFacet.show();
}
传参
如需为界面传递参数,请使用 properties
元素。该元素定义属性列表,这些属性用界面的公共 setters 注入打开的界面。
例如,我们从 ScreenFacetScreen
界面给 AnotherScreen
的 num
属性传递一个整数值。
@UiController("sample_AnotherScreen")
@UiDescriptor("another-screen.xml")
public class AnotherScreen extends Screen {
@Autowired
private Label<Integer> label; (1)
private Integer num;
public void setNum(Integer num) { (2)
this.num = num;
}
@Subscribe
public void onAfterShow(AfterShowEvent event) { (3)
label.setValue(num);
}
}
1 | 设置一个文本标签展示接收到的值。 |
2 | 定义 setter 用于传递值。 |
3 | 将收到的值赋值给标签。 |
在 ScreenFacetScreen
的 XML 描述中,我们为 property
元素定义 name
和 value
属性:
<window xmlns="http://jmix.io/schema/ui/window"
caption="msg://screenFacetScreen.caption">
<facets>
<screen id="propScreenFacet"
screenId="sample_AnotherScreen"
openMode="DIALOG"
onButton="propBtn">
<properties>
<property name="num" value="55"/>
</properties>
</screen>
</facets>
<layout>
<button id="propBtn"
caption="Pass params"
width="100%"/>
</layout>
</window>
事件和处理器
如需使用 Jmix Studio 生成处理器的桩代码,需要在界面 XML 描述或者 Jmix UI 层级结构面板选中 facet 元素,然后用 Jmix UI 组件面板的 Handlers 标签页生成。 或者可以使用界面控制器顶部面板的 Generate Handler 按钮。 |
AfterCloseEvent
AfterCloseEvent
在 facet 配置的界面关闭之后发送。参阅 AfterCloseEvent 了解详情。
is sent after the screen configured by the facet is closed. See AfterCloseEvent for details.
如需以编程的方式注册事件处理器,使用 addAfterCloseEventListener()
方法。
AfterShowEvent
AfterShowEvent
在 facet 配置的界面展示之后发送。参阅 AfterShowEvent 了解详情。
如需以编程的方式注册事件处理器,使用 addAfterShowEventListener()
方法。
OptionsProvider
OptionsProvider
代理方法支持编程式配置界面参数,示例:
@Install(to = "propScreenFacet", subject = "optionsProvider")
private ScreenOptions propScreenFacetOptionsProvider() {
return new MapScreenOptions(ParamsMap.of("num", 55));
}
编程式用法,调用 setOptionsProvider()
方法。
ScreenConfigurer
该处理方法接收一个界面作为参数,并可以在打开之前对其进行初始化。如果需要通过 public setter 为打开的界面提供参数,可以使用 configurer。设置 configurer 的首选方法是使用带有 @Install
注解的控制器方法,示例:
@Install(to = "screenFacetC", subject = "screenConfigurer")
protected void screenFacetCScreenConfigurer(CustomerBrowse customerBrowse) {
customerBrowse.setSomeParameter(55);
}
编程式用法,调用 setScreenConfigurer(Consumer<S> screenConfigurer)
方法。