菜单Menu
大约 3 分钟
菜单Menu
Menu是什么
菜单和模块就是地图与导航,没有地图、导航就无法畅游模块并进行相关业务操作。本文将展开介绍初始化Menu的两种方式分别是:注解式、数据初始化式。
怎么构建Menu
注解式
使用示例: 用@UxMenus声明DemoMenus为菜单初始化入口,同时该类在DemoModule配置扫描路径中,那么通过DemoMenus初始化的菜单都挂在demo_core这个模块上。
如果采用这种模式,建议同一个模块的菜单都只配置在一处
@UxMenus
public class DemoMenus implements ViewActionConstants {
@UxMenu("商店管理")
@UxRoute(PetShopProxy.MODEL_MODEL)
class PetShopProxyMenu{
}
@UxMenu("宠物达人")
@UxRoute(PetTalent.MODEL_MODEL)
class PetTalentMenu{
}
}
菜单的三种点击效果: 菜单的层级关系通过@UxMenu
的嵌套进行描述
菜单点击效果有三种分别对应不同的Action的类型,关于Action的类型详见3.5.3【Action的类型】一文。
- 窗口动作(ViewAction): 通过
@UxRoute
定义一个与菜单绑定的viewAction,viewName代表视图的name(其默认值为redirectListPage,也就是跳转到列表),value代码视图所属模型的编码,viewType代表view类型(其默认值为ViewTypeEnum.TABLE)
@UxMenus
public class DemoMenus implements ViewActionConstants {
@UxMenu("商店")
class ShopMenu {
@UxMenu("创建商店")
@UxRoute(value = PetShop.MODEL_MODEL, viewName = "redirectCreatePage", viewType = ViewTypeEnum.FORM)
class ShopCreateMenu {
}
}
}
效果:点击创建商店的时候,就会显示通过@UxRoute
指定的一个窗口,显示类型为指定的viewType,这里是FROM。
- 服务器动作(ServerAction):
@UxServer
定义一个与菜单绑定的serverAction@UxMenu("UxServer")@UxServer(model = PetCatItem.MODEL_MODEL,name = "uxServer")
其中name代表serverAction的name,model或value代码serverAction所属模型的编码
@UxMenus
public class DemoMenus implements ViewActionConstants {
@UxMenu("商店") class ShopMenu{
@UxMenu("UxServer")
@UxServer(model = PetCatItem.MODEL_MODEL,name = "uxServer")
class ShopSayHelloMenu{
}
}
}
效果:点击UxServer时,会执行对应的服务器动作,这里在界面右上角弹出提示,提示信息为uxServer。
- 跳转动作(UrlAction): @UxLink定义一个与菜单绑定的UrlAction,
@UxMenu("Oinone官网")@UxLink(value = "http://www.oinone.top",openType= ActionTargetEnum.OPEN_WINDOW)
,其中value为跳转url,openType为打开方式默认为ActionTargetEnum.ROUTER,打开方式有以下几种- ROUTER("router", "页面路由", "页面路由")
- DIALOG("dialog", "页面弹窗", "页面弹窗")
- DRAWER("drawer", "打开抽屉", "打开抽屉")
- OPEN_WINDOW("openWindow", "打开新窗口", "打开新窗口")
@UxMenus
public class DemoMenus implements ViewActionConstants {
@UxMenu("友情链接")
class FlinkManagement {
@UxMenu("Oinone官网")
@UxLink(value = "http://www.oinone.top", openType = ActionTargetEnum.OPEN_WINDOW)
class SsLink {
}
@UxMenu("百度")
@UxLink(value = "http://www.baidu.com", openType = ActionTargetEnum.OPEN_WINDOW)
class BaiduLink {
}
}
}
效果:点击Oinone官网时,会跳转到在@UxLink
注解中指定的value值
数据初始化式(不推荐)
定义
在模块启动生命周期中,调用InitializationUtil工具中的createViewActionMenu。
示例
配置从宠物商店列表到PetShopBatchUpdate的窗口动作。
- 新建DemoModuleMetaDataEditor,MetaDataEditor是oinone在计算元数据时提供给我们主动动态生成元数据的方式,它在自动扫描元数据注解之后进行。我们只要实现MetaDataEditor接口就可以做一些元数据初始化事情,常用场景就是初始化一些交互相关的元数据如:窗口动作。
- 通过指定工具(InitializationUtil),生成一个窗口动作:动作名为【批量更新数据状态】,指定在宠物商店列表页,并且是单条或多条记录被选择中时出现。点击该窗口动作跳转到PetShopBatchUpdate的默认Form页,跳转方式为DIALOG弹出框。
@Component
public class DemoModuleMetaDataEditor implements MetaDataEditor {
@Override
public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
InitializationUtil util = InitializationUtil.get(metaMap, DemoModule.MODULE_MODULE,DemoModule.MODULE_NAME);
if(util==null){return;}
//初始化自定义前端行为
viewActionInit(util);
}
private void viewActionInit(InitializationUtil util){
util.createViewAction("demo_petShop_batch_update","批量更新数据状态", PetShopProxy.MODEL_MODEL,
InitializationUtil.getOptions(ViewTypeEnum.TABLE), PetShopBatchUpdate.MODEL_MODEL,ViewTypeEnum.FORM, ActionContextTypeEnum.SINGLE_AND_BATCH
, ActionTargetEnum.DIALOG,null,null);
}
}
菜单注解
@UxMenus
菜单集合,使用时应与@UxMenu
配套使用
@UxMenu
使用示例
@UxMenus
public class DemoMenus implements ViewActionConstants {
@UxMenu("商店管理")
@UxRoute(PetShopProxy.MODEL_MODEL)
class PetShopProxyMenu{
}
@UxMenu("宠物达人")
@UxRoute(PetTalent.MODEL_MODEL)
class PetTalentMenu{
}
}
value
或label
:菜单显示名称summary
:菜单摘要信息icon
:菜单图标clientTypes
:客户端类型数组