As far as I remember ERNavigationMenu has a limit of three levels. I have not 
looked into it extensively to see where the limitation is, but I remember a 
suggestion to use the ModernNavigationMenu when you needed more than 3 levels.

Have you considered moving your navigation widget somewhere else outside the 
navigation menu structure? For example in a header or above a repetition?? If 
you remember the old NeutralLook stuff, the pagewrapper contained something 
like you are trying to create.


On 2012-07-10, at 1:29 PM, Dawn Lockhart wrote:

> OK, still can't get my custom navigation to work. I have 4 main tabs in my 
> application; 3 of the 4 are typical ERXNavigationMenu tabs, with 3 levels of 
> sub tabs. But one tab has so many subtabs that I want to display the entities 
> in a popup button and when the entity is selected, navigate to that entity's 
> query or pick page. I have that part working, but as soon as you click on any 
> action on the query or pick page, you are immediately logged out with no 
> exceptions thrown. 
> 
> To do this, I've extended the ERXNavigationMenu to create MyNavigationMenu 
> and added a showDropDownMenu condition if there are 4 levels in the 
> NavigationState. In the rule file I've made the navigationState for those 
> entities, have 4 levels. For example:
> 
> 60 : pageConfiguration like 'QueryBilling*' => navigationState = 
> "DataManagement.DMList.Billing.QueryBilling" 
> [com.webobjects.directtoweb.Assignment],
> 
> 
> Here's my MyNavigationMenu:
> 
> Created a MyNavigationMenu component that extends ERXNavigationMenu and have 
> added MyNavigationMenu to my MenuHeader.html.
>   -  In the html file, I've added:
> <wo:if condition="$showDropDownMenu">
>         <div class="navDropDownMenu">
>         <wo:form>
>             <wo:AjaxObserveField action="$entityChanged" fullSubmit="$true" 
> updateContainerID="ContentWrapper">
>                 <wo:popUpButton item="$aNavigationItem" list="$dropDownItems" 
> noSelectionString="Select One to Manage" 
>                 displayString="$aNavigationItem.displayName" 
> selection="$selectedNavigationItem" />
>             </wo:AjaxObserveField>
>         </wo:form>
>         </div>
>     </wo:if>
> 
>   - This is the Java file:
> public class MyNavigationMenu extends ERXNavigationMenu 
> {
>     public ERXNavigationItem selectedNavigationItem;
>     public NSArray _dropDownItems;
>     
>     public MyNavigationMenu(WOContext context)
>     {
>         super(context);
>         _dropDownItems = null;
>     }
> 
>     public ERXNavigationItem selectedNavigationItem() { return 
> selectedNavigationItem; }
>     public void setSelectedNavigationItem(ERXNavigationItem ni) { 
> selectedNavigationItem = ni; }
>     
>     public NSArray dropDownItems() { return _dropDownItems; }
>     public void setDropDownItems(NSArray newDropDownItems) { _dropDownItems = 
> newDropDownItems; }
> 
>     public void reset() 
>     {
>         _dropDownItems = null;
>         super.reset();
>     }
> 
>     @Override
>     public void setUpMenu() 
>     {
>         super.setUpMenu();
>         if (menuLevelsToShow() >= 4 && dropDownItems() == null)
>             setDropDownItems(itemsForLevel(3));
>     }
> 
>     public boolean showDropDownMenu() 
>     {
>         return navigationState().stateAsString() != null &&
>             navigationState().state().count() >= 3 &&
>             _dropDownItems != null &&
>             _dropDownItems.count() > 0;
>     }
> 
>     public WOActionResults entityChanged()
>     {
>         if (selectedNavigationItem != null)
>         {
>             String action = selectedNavigationItem.action();
>             action = action.substring(action.lastIndexOf(".") + 1);
>             NSArray<Method> methods = new 
> NSArray<Method>(((Session)session()).navController().getClass().getDeclaredMethods());
>             WOComponent nextPage = null;
>             Method m = null;
>             for (Method m1 : methods)
>             {
>                 if (m1.getName().equals(action))
>                 {
>                     m = m1;
>                     break;
>                 }
>             }
>             if (m != null)
>             {
>                 try 
>                 { 
>                     nextPage = 
> (WOComponent)m.invoke(((Session)session()).navController(), new Object[0]);  
> 
>                 }
>                 catch (Exception e) 
>                 {  
>                     log.debug(e.getMessage());
>                 }
>                 return (WOActionResults)nextPage;
>             }
>         }
>         return null;
>     }
> }
> 
> 
> NavigationMenu.plist section for this tab:
> (
>     {
>         name = "Root";
>         children = "session.navController.mainTabs";
>     },
>     {
>         name = "DataManagement";
>         action = "session.navController.dataManagementAction";
>         displayName = "Data Management";
>     },
>     {
>         name = "DMList";
>         children = ("Billing", "CourseLength");
>     },
>     {
>         name = "Billing";
>         action = "session.navController.queryBillingAction";
>         children = ("QueryBilling", "CreateBilling");
>     },
>     {
>         name = "QueryBilling";
>         action = "session.navController.queryBillingAction";
>     },
>     {
>         name = "CreateBilling";
>         action = "session.navController.createBillingAction";
>     },
>     {
> name = CourseLength;
> children = ("PickCourseLength","CreateCourseLength");
> action = "session.navController.pickCourseLengthAction";
> displayName = "Course Length";
> }, 
> {
> name = CreateCourseLength;
> action = "session.navController.createCourseLengthAction";
> displayName = "Add Course Length";
> },
> {
> name = ListCourseLength;
> action = "session.navController.listCourseLengthAction";
> },
>  
> {
> name = PickCourseLength;
> action = "session.navController.pickCourseLengthAction";
> displayName = "Course Lengths";
> }
> )
> 
> Any ideas on why this doesn't work? Or has someone already done this a better 
> way? I know I should probably have something in the navigationMenu.plist or 
> rule file to set showDropDownMenu instead of just adding a fourth level to 
> the navigationState, but once I learn how to create those custom flags, I'll 
> do that. 
> 
> TIA, 
> Dawn
> 
> From: David Holt <[email protected]>
> Date: Friday, June 29, 2012 9:52 AM
> To: D LOCKHART <[email protected]>
> Subject: Re: Custom D2W Navigation
> 
> http://wiki.wocommunity.org/display/WO/Project+WONDER-Frameworks-ERXNavigation
> 
> On 2012-06-28, at 5:32 PM, Dawn Lockhart wrote:
> 
>> I have extended ERXNavigationMenu to create a submenu as a drop down list 
>> instead of tabs. When I select an item in the drop down, I set the new 
>> navigation state in ERXNavigationManager.manager().navigationStateForSession 
>> and then I return the correct list page WOComponent. So it correctly 
>> navigates to the list page. However, once I click on any navigation actions 
>> on the list page, it immediately logs me out. What else do I need to set 
>> before I return the list page? 
>> 
>> I had hoped to come this week to WOWODC, but K12 was too cheap to send us 
>> and they stalled so long in telling us that we weren't going, that the hotel 
>> was booked and the airfares had risen dramatically. :( So Kieran will have 
>> to drink a few beers for me!
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/programmingosx%40mac.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to