[jboss-user] [JBoss Portal] - Re: Custom navigation region

JohnnyTheHun do-not-reply at jboss.com
Wed Dec 3 16:57:00 EST 2008

I have found the solution, but I would like to ask the Portal developers if there is a more elegant solution.

If not, will a later version of JBoss Portal support 
- injecting default portlets into "special" regions (like the navigation region, but with real portlets)
- or support markup in layouts that specify portlets to be injected at the place of the markup, for example 

  | <p:injectPortlet instance="InjectMePortletInstance">
  | <parameters/>
  | </p:injectPortlet>

And the solution for Injecting content to a custom region for the current version is:

1. Create a class Named
MyPageCustomizerInterceptor that extends ControllerInterceptor

2. Get JBoss source and copy the contents of:
into your class code.
Import a bunch of JBoss libraries

3. there is a part in the code in the "invoke" method:

  | if (tabbedNav != null)
  |             {
  | ....
  |             }

instantly after this code insert the following (of course modified to your preferences). Modify the "BLAH2" and the "inject_region" strings to your needs.

  |            String toInject = "<h1>AT LAST! I have injected my custom stuff!</h1>";
  |            Map windowProps = new HashMap();
  |            windowProps.put(ThemeConstants.PORTAL_PROP_WINDOW_RENDERER, "emptyRenderer");
  |            windowProps.put(ThemeConstants.PORTAL_PROP_DECORATION_RENDERER, "emptyRenderer");
  |            windowProps.put(ThemeConstants.PORTAL_PROP_PORTLET_RENDERER, "emptyRenderer");
  |            WindowResult res = new WindowResult("", toInject, Collections.EMPTY_MAP, windowProps, null, WindowState.NORMAL, Mode.VIEW);
  |            WindowContext blah = new WindowContext("BLAH2", "inject_region", "0", res);
  |            rendition.getPageResult().addWindowContext(blah);
  |            Region region = rendition.getPageResult().getRegion2("inject_region");
  |            DynaRenderOptions.NO_AJAX.setOptions(region.getProperties());

3. Put your classes into a jar and put them under

4. Modify

replace org.jboss.portal.core.aspects.controller.PageCustomizerInterceptor in

  | <mbean code="org.jboss.portal.core.aspects.controller.PageCustomizerInterceptor"
with the full classname of your class

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4194164#4194164

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4194164

More information about the jboss-user mailing list