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]