For many applications using the
Menu
control to centralize application navigation is very useful. Menus are
defined in a WEB-INF/menu.xml
file which is very easy to
change.
A menu is typically defined in the a page border template so they are available through out the application. The Menu control does not support HTML rendering, so you need to define a Velocity macro to programmatically render the menu. You would call the macro in your border template with code like this:
#writeMenu
($rootMenu)
An advantage of using a macro to render your menu is that you can reuse
the code across different applications, and to modify an applications menu you
simply need to edit the WEB-INF/menu.xml
file. A good
place to define your macros is in the webroot /macro.vm
file as it is automatically included by Click.
Using macros you can create dynamic menu behaviour such as only rendering menu items a user is authorized to access with isUserInRoles().
#if ($menu.isUserInRoles())
..
#end
You can also use JavaScript to add dynamic behaviour such as drop down menus, for example see the Menu page in Click Examples.