Я пытаюсь создать подменю в моих существующих меню, которые конфигурируются с использованием файла конфигурации .yaml
в коде Java.
Здесь вы можете найти существующую модель реализации проекта
Title
Menu 1
Menu 2
Menu 3
Но сейчасЯ пытаюсь реализовать, как показано ниже:
Title
Menu 1
Menu 2
SubMenu 2.1
SubMenu 2.2
Menu 3
Пожалуйста, найдите мой существующий файл конфигурации .yaml
.
- !!com.model.Menu
name: Programs
code: PRGRM
action:
css: icon programs-icon
childMenus:
- !!com.model.Menu
name: Create
code: PRGRM_CRT
action: /programs/basic_information
css: icon icon-create
- !!com.cat.pscs.model.Menu
name: Download Template
code: DWNLD_BSNS_CS_TMPLT
action: /business-case-templates
css: icon icon-download
Здесь я пытаюсь создать подменю для name: Create
.Но это не работает.Пожалуйста, найдите мой код ниже, который пытается.
- !!com.model.Menu
name: Programs
code: PRGRM
action:
css: icon programs-icon
childMenus:
- !!com.model.Menu
name: Create
code: PRGRM_CRT
action: /programs/basic_information
css: icon icon-create
visibleToExternal: false
childMenus:
- !!com.model.Menu
name: Create
code: PRGRM_CRT
action: /programs/basic_information
css: icon icon-create
- !!com.cat.pscs.model.Menu
name: Download Template
code: DWNLD_BSNS_CS_TMPLT
action: /business-case-templates
css: icon icon-download
Пожалуйста, найдите мой класс Java Pojo для того же.
@Getter
@Setter
@NoArgsConstructor
public class Menu {
private String name;
private String code;
private String action;
private String css;
private String symbol;
private List<Menu> childMenus;
private List<Menu> subMenus;
public boolean hasChildMenus() {
return childMenus != null && !childMenus.isEmpty();
}
}
Пожалуйста, найдите класс menuRepository
ниже
@Repository
public class MenuRepository {
private static final Logger LOGGER = LoggerFactory.getLogger(MenuRepository.class);
private static String menuYamlLocation = "classpath:config/menus.yaml";
private Collection<Menu> menus;
public Collection<Menu> getMenus() {
Cloner cloner = new Cloner();
return cloner.deepClone(menus);
}
@PostConstruct
private void loadMenus() throws IOException {
LOGGER.info("Loading menus from the file.");
Yaml yaml = new Yaml();
InputStream in = null;
try {
final DefaultResourceLoader loader = new DefaultResourceLoader();
final Resource resource = loader.getResource(menuYamlLocation);
in = resource.getInputStream();
menus = (Collection<Menu>) yaml.load(in);
} finally {
close(in);
}
}
private void close(InputStream in) {
if (in != null) {
try {
in.close();
} catch (Exception e) {
// no-op
}
}
}
}
Обновление-1
Добавлен мой код подменю в menu.yaml
файле, как показано ниже.
- !!com.model.Menu
name: Defaults
code: SYS_DFLT
action: /system-defaults
css: icon icon-system-defaults
subMenus:
- !!com.model.Menu
name: System Defaults
code: UPLD_PRGRM_USG
action: /upload-program-usage
css: icon icon-upload
Пожалуйста, найдите мой файл subMenus.jade
ul.subMenu(role="menu", aria-labelledby="dLabel")
for sub_menu in menu.getSubMenus()
li
a(href="#!{sub_menu.getAction()}", id="#{menu.getName()}_#{sub_menu.getName()}")
if sub_menu.getSymbol() != null
span.hidden-md #{sub_menu.getSymbol()}
if sub_menu.getCss() != null
span(class="#{sub_menu.getCss()}")
| !{sub_menu.getName()}
Я добавил свой код subMenu в мой файл childMenu.jade (я добавил свой subMenu.jade в мой childMenu.jade)
ul.dropdown-menu(role="menu", aria-labelledby="dLabel")
for child_menu in menu.getChildMenus()
li
a(href="#!{child_menu.getAction()}", id="#{menu.getName()}_#{child_menu.getName()}")
if child_menu.getSymbol() != null
span.hidden-md #{child_menu.getSymbol()}
if child_menu.getCss() != null
span(class="#{child_menu.getCss()}")
| !{child_menu.getName()}
if menu.getSubMenus() != null
include _sub_menu
Пожалуйста, найдите прикрепленный скриншот.Подменю не отображается должным образом