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 <programming...@mac.com<mailto:programming...@mac.com>>
Date: Friday, June 29, 2012 9:52 AM
To: D LOCKHART <dlockh...@k12.com<mailto:dlockh...@k12.com>>
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      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to