Возникла сложность при построении навигационного меню на сайте. Хотелось бы сделать все максимально красиво, но найти пример на java не удалось.
И так давно:
В БД 4 таблицы для масштабируемости меню:
Таблица1(название меню): id, name, position;
Таблица2(кто родитель(маппинг меню на меню)): id, id_menuName, parents;
Таблица3(ссылки): id, links;
Таблица4(маппинг ссылка на меню): id, id_menuName, id_links;
Вот тут stackoverflow.com/questions/2871861/how-to-build-unlimited-level-of-menu-through-php-and-mysql увидел решение ввиде метода hasChild(), т.е. проверить есть ли во второй таблице в колонке parents тот id который собираемся строить и если да - рекурсивно извлекать, но возник вопрос:
если я как foreach буду перебирать menuName, после того как пройдусь по вложенным меню как снова их не вызвать.
Может есть какой то мануал как это грамотно делать? Гугл при запросе по java menu мне только мануалы по awt/swing/FX предлагает.
Как построить меню уже разобрались, как вижу. Если не разобрались, советую следующий подход, выбираете все записи всех меню сразу одним запросом, программно парсите их и создаете дерево меню в hashtable или xml.dom (я не шучу!, здесь xpath рулит).
Далее, объект меню сохраняете в servlet context или application context.
И больше в базу данных не лезете, до тех пор, пока меню не поменяется. Если меню изменилось, то перегенерируете его еще раз. Даже если меню у вас будет из 65000 пунктов, что навряд ли, то это много памяти не займет в любом случае.
Это был бы второй вопрос. Как меню загнать в некий кэш чтобы не запрашивать его для каждой страницы открытой пользователем, ведь меняется оно не часто.
Почитаю про написанное спасибо. Но вопрос как мне правильно пройтись. В php(с которым очень мало я знаком) как я понимаю все сводится к созданию ассоциативного массива с данными. А в java как лучше сделать. Куда забить данные? Хочется красивый и лаконичный код
А на сколько будет кривым решение: Таблицу залить в несколько списков java(какого типа список еще не решил) где ключ это id таблицы. А потом оперировать value этих списков. Все статическое ( т.е. Один раз обратилось к бд и висит в оперативке).
Про hashtable пишут что сим лучше более не пользоваться.
Все что находится в гугле по поводу создания меню - на php и сводится к ассоциативному массиву с вложенностью. Пытаюсь понять какое решение не будет костыльным.