@@ -343,7 +343,7 @@ public String buildPageContentTemplate( int nMode, HttpServletRequest request )
343343 int nLevel = 0 ;
344344
345345 List <MenuItem > mapItems = new ArrayList <MenuItem >( );
346- buildMenu ( request , mapItems , PortalService .getRootPageId ( ), nLevel );
346+ buildMenu ( request , mapItems , PortalService .getRootPageId ( ), nLevel , new HashSet <>( ) );
347347
348348 Map <String , Object > model = new HashMap <>( );
349349 model .put ( MARK_MAP_ITEMS , MenuTreeBuilder .buildTree ( mapItems ) );
@@ -353,9 +353,14 @@ public String buildPageContentTemplate( int nMode, HttpServletRequest request )
353353
354354 return t .getHtml ();
355355 }
356-
357- private void buildMenu ( HttpServletRequest request , List <MenuItem > flatMenu , int nPageId , int nLevel )
356+
357+ private void buildMenu ( HttpServletRequest request , List <MenuItem > flatMenu , int nPageId , int nLevel , Set < Integer > seenPages )
358358 {
359+ if ( !seenPages .add ( nPageId ) )
360+ {
361+ AppLogService .error ( "SiteMapApp : A cycle exists in pages; page id {} was already processed" , nPageId );
362+ return ;
363+ }
359364 Page page = PageHome .getPage ( nPageId );
360365
361366 if ( page .isVisible ( request ) )
@@ -368,7 +373,7 @@ private void buildMenu( HttpServletRequest request, List<MenuItem> flatMenu, int
368373
369374 for ( Page pageChild : PageHome .getChildPagesMinimalData ( nPageId ) )
370375 {
371- buildMenu ( request , flatMenu , pageChild .getId ( ), nLevel + 1 );
376+ buildMenu ( request , flatMenu , pageChild .getId ( ), nLevel + 1 , seenPages );
372377 }
373378 }
374379 }
0 commit comments