3.5.1.6. 根界面
根界面是一个通用 UI 界面,直接展示在 web 浏览器的标签页中。有两种类型的这种界面:登录界面和主界面。其它的组件中,任何根界面都可以包含 WorkArea
组件,这样使得可以在内部的标签页中打开其它的应用程序界面。如果根界面不包含 WorkArea
,应用程序界面只能以 DIALOG
模式打开。
登录界面
登录界面是在用户登录之前展示的界面。可以通过扩展框架提供的登录界面或者创建全新的登录界面对该界面进行自定义。
如果要扩展已有的界面,在 Studio 界面创建向导中使用 Login screen 模板。Studio 会帮助创建一个扩展了标准登录界面的界面。该界面会替代标准的登录界面,因为它在 @UiController
注解中使用了相同的 login
标识符。
如果想从头创建一个新的界面,可以使用 Blank screen 模板。一个极简的登录界面源码差不多是这样:
my-login-screen.xml
<window xmlns="http://schemas.haulmont.com/cuba/screen/window.xsd"
caption="Login"
messagesPack="com.company.sample.web">
<layout>
<label value="Hello World"/>
<button id="loginBtn" caption="Login"/>
</layout>
</window>
MyLoginScreen.java
package com.company.sample.web;
import com.haulmont.cuba.gui.Route;
import com.haulmont.cuba.gui.components.Button;
import com.haulmont.cuba.gui.screen.*;
import com.haulmont.cuba.security.auth.LoginPasswordCredentials;
import com.haulmont.cuba.web.App;
@UiController("myLogin")
@UiDescriptor("my-login-screen.xml")
@Route(path = "login", root = true)
public class MyLoginScreen extends Screen {
@Subscribe("loginBtn")
private void onLoginBtnClick(Button.ClickEvent event) {
App.getInstance().getConnection().login(
new LoginPasswordCredentials("admin", "admin"));
}
}
为了使用这个界面替代系统默认的界面,需要在 web-app.properties
文件中将 cuba.web.loginScreenId
配置项设置为该界面的 id。
cuba.web.loginScreenId = myLogin
当然,也可以直接将新界面的 id 设置为 login
,就不需要修改这个配置了。
主界面
主界面是用户登录之后看到的应用程序的根界面。框架提供的带有侧边菜单的标准主界面使用 main
作为 id。
Studio 有一些创建自定义主界面的模板,这些模板都使用相同的 MainScreen
类作为控制器的基类。
Main screen with side menu 创建一个标准主界面的扩展,使用
main
id。Main screen with responsive side menu 创建一个类似的界面,但是侧边菜单是响应式的,能在窄的显示环境中自动收起。该界面会带有自己生成的 id,因此,必须在
web-app.properties
里面进行注册:cuba.web.mainScreenId = respSideMenuMainScreen
Main screen with top menu 创建一个带有顶部菜单栏的界面,并且能在左侧显示 文件夹面板。该界面会带有自己生成的 id,因此,必须在
web-app.properties
里面进行注册:cuba.web.mainScreenId = topMenuMainScreen
除了标准 UI 组件之外,下面这些特殊的组件也可以用在主界面:
SideMenu
- 应用程序菜单,以垂直树的形势展示。AppMenu
– 应用程序菜单栏。AppWorkArea
– 工作区,如果需要以THIS_TAB
、NEW_TAB
和NEW_WINDOW
模式打开界面,则需要该组件。FoldersPane
– 应用程序和搜索文件夹的面板。UserIndicator
– 显示当前用户的控件,也包括选择替代用户的功能。使用
setUserNameFormatter()
方法可以设置不同于User
实例名称的用户名称展示:userIndicator.setUserNameFormatter(value -> value.getName() + " - [" + value.getEmail() + "]");
NewWindowButton
– 在单独的浏览器标签页打开新主界面的按钮。UserActionsButton
– 如果用户会话没有认证,显示登录界面的链接。否则,显示一个菜单:用户设置界面的链接和登出操作。LogoutButton
– 应用程序登出按钮。TimeZoneIndicator
– 显示当前用户时区的标签。FtsField
– 全文搜索控件。
下列应用程序属性可能影响主界面:
cuba.web.appWindowMode – 设置主窗口的默认模式:标签页式的还是单独界面式(
TABBED
或SINGLE
)。用户可以使用UserActionsButton
提供的 Settings - 设置 界面进行修改。cuba.web.maxTabCount – 当主界面在标签页式时,使用该属性设置用户能打开的标签页最多个数。默认值为 7。
cuba.web.foldersPaneEnabled - 为使用 Main screen with top menu 模板创建的界面启用显示文件夹面板。
cuba.web.defaultScreenId - 设置主窗口自动打开的默认界面。
cuba.web.defaultScreenCanBeClosed - 定义用户是否可以关闭默认界面。