подменю с использованием конфигурации файла yaml в java - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь создать подменю в моих существующих меню, которые конфигурируются с использованием файла конфигурации .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    

Пожалуйста, найдите прикрепленный скриншот.Подменю не отображается должным образом

enter image description here

...