OK, I just redid everything, and got back to exactly the same error.  I have 
essentially no idea at all what to even look at at this point.  

Andrew

On Jun 9, 2010, at 7:07 PM, David Holt wrote:

> Hi Andrew,
> 
> On 9-Jun-10, at 3:34 PM, akinnie wrote:
> 
>> OK, that all makes sense.
> 
> :-)
> 
>> I didn't think I needed a home() method as I was putting it in a 
>> subcomponent, so I commented it out.
> 
> homeAction() is just a name. Don't be confused by that. In this case, David 
> arbitrarily made the choice that the homeAction was the customary QueryAll 
> page for the ERModernMoviesDemo. It might just as easily be a list of users, 
> or a search page for bugs, or whatever you want. You just need to call the 
> method from your "Admin" tab, whatever it is called. For example you might 
> want to call it adminHomePage(). That just doesn't matter.
> 
> The D2W.factory().defaultPage called in the homeAction is set in the Rules. 
> If you open up the rules for JavaDirectToWeb framework you'll find
> 
> 0 *true* startupTask = "queryAll"
> 
> This is what is being used by defaultPage to render the QueryAll page 
> component.
> 
> If you prefer a different task to be your beginning task, set your new 
> 'startupTask' at a higher priority in the rules and make sure that you 
> specify a 'startupEntityName' as well (any task other than queryAll acts on 
> an entity).
> 
> The Factory class in BugTracker gives you all sorts of options for actions 
> that you could call from your navigation scheme (for example you could 
> display a qualified list of entities based on your logged in user). This is 
> where ERXThreadStorage comes in handy because it is accessible from your EOs.
> 
> 
>> I think.  I am in school at the moment, so I do have it in front of me.  
>> Hopefully, if I'm not a zombie, I'll be able to look at it after 10:30 
>> tonight.
>> 
>> Thanks to you and Ramsey for all your help. . . not to suggest I won't need 
>> more tomorrow.
> 
> Not a problem. It is my hope that I can be of some help!
> 
> David
> 
>> 
>> Andrew
>> 
>> On Jun 09, 2010, at 05:27 PM, David Holt <programming...@mac.com> wrote:
>> 
>>> Hi Andrew,
>>> 
>>> On 9-Jun-10, at 1:12 PM, Andrew R. Kinnie wrote:
>>> 
>>>> yeah, I just noticed that.  I was still doing it the old (Ajaxy) way.  I 
>>>> also noticed that I didn't replicate the MenuHeader (and instead just 
>>>> included an ERXNavigationMenu directly in Admin), so I changed that, and 
>>>> then I got a session timed out error.
>>> 
>>> I don't think you need the menu header unless you want the extra navigation 
>>> buttons at the top of your header.
>>> 
>>>> 
>>>> I have an admin() method in my Main component (which I use as a wrapper . 
>>>> . . in the non d2w sense, i.e. it's not bound to that key in the rule, 
>>>> it's for general site visitors).  All it did was check which component was 
>>>> loaded as currentPage, and load that into the wrapper's content area.  
>>>> Obviously not appropriate in this case.  I changed it to just return a 
>>>> WOActionResults which is an instance of Admin.
>>>> 
>>>> That has the same result as before.  NPE because the context is null.
>>>> 
>>>> ERD2WHead.java     32      displayNameForPageConfiguration
>>>>    er.directtoweb.components
>>>> 
>>>> 
>>>> How should I do this?
>>> 
>>> You need to use the D2W Factory to create your admin page. So you first 
>>> decide what kind of page it is (list of all entities?) and then use the 
>>> interface to create it.
>>> 
>>> So if you take a peek in MoviesNavigationController you'll see a bunch of 
>>> actions such as:
>>> 
>>> // MOVIES
>>> 
>>> 
>>> public WOComponent queryMovieAction() {
>>> return queryPageForEntityName(MOVIE);
>>> }
>>> 
>>> 
>>> public WOComponent createMovieAction() {
>>> return newObjectForEntityName(MOVIE);
>>> }
>>> 
>>> 
>>> Which then call:
>>> 
>>> // GENERIC ACTIONS
>>> 
>>> 
>>>    public WOComponent queryPageForEntityName(String entityName) {
>>>        QueryPageInterface newQueryPage = 
>>> D2W.factory().queryPageForEntityNamed(entityName, session());
>>>        return (WOComponent) newQueryPage;
>>>    }
>>> 
>>>        public WOComponent newObjectForEntityName(String entityName) {
>>>        WOComponent nextPage = null;
>>>        try {
>>>            EditPageInterface epi = 
>>> D2W.factory().editPageForNewObjectWithEntityNamed(entityName, session());
>>>            epi.setNextPage(session().context().page());
>>>            nextPage = (WOComponent) epi;
>>>        } catch (IllegalArgumentException e) {
>>>            ErrorPageInterface epf = D2W.factory().errorPage(session());
>>>            epf.setMessage(e.toString());
>>>            epf.setNextPage(session().context().page());
>>>            nextPage = (WOComponent) epf;
>>>        }
>>>        return nextPage;
>>>    }
>>> 
>>> If you just want to try out your Admin page, try the homeAction() from the 
>>> controller. It should work out of the box to create your QueryAll page. If 
>>> it doesn't work, then we'll know you've done something wrong with your 
>>> setup. All the navigation actions called in the ERModernMoviesDemo 
>>> NavigationMenu.plist are routed through this controller. If you want a much 
>>> more detailed look at things that are possible, check out the Factory class 
>>> in the BugTracker application.
>>> // NAV ACTIONS
>>> 
>>> 
>>> public WOComponent homeAction() {
>>>        return D2W.factory().defaultPage(session());
>>>    }
>>> 
>>> David
>>> 
>>> 
>>>> 
>>>> On Jun 9, 2010, at 4:00 PM, David Holt wrote:
>>>> 
>>>>> How are you calling the Admin page?
>>>>> 
>>>>> David
>>>>> 
>>>>> On 9-Jun-10, at 12:49 PM, Andrew R. Kinnie wrote:
>>>>> 
>>>>>> Sorry, didn't reply all with my last reply.
>>>>>> 
>>>>>> Begin forwarded message:
>>>>>> 
>>>>>>> Thanks David and Ramsey.  I seem to be having issues, unfortunately.
>>>>>>> 
>>>>>>> To clarify, originally, I was planning to have the admin component be a 
>>>>>>> subcomponent within the normal wrapper (by "normal I mean pre-d2w -- 
>>>>>>> not "non"-d2w as I previously suggested.  I meant the site works 
>>>>>>> without d2w, I just thought adding the admin as d2w would be a good way 
>>>>>>> to learn d2w).  Anyway, I attempted to accomplish this by making my 
>>>>>>> Admin component essentially a copy of the PageWrapper from 
>>>>>>> ERModernMoviesDemo . . . but got confused by the head and body stuff.  
>>>>>>> Now I see that was likely the source of many of my issues.
>>>>>>> So now I am trying to  do exactly what you suggest and open a new 
>>>>>>> window with a page level admin component via D2W.  (restoring the html, 
>>>>>>> head and body tags).  Now, however, when ERD2WHead asks for this:
>>>>>>>           D2WContext context = (D2WContext) 
>>>>>>> context().page().valueForKey("d2wContext");
>>>>>>> 
>>>>>>> I am getting null.  I have the d2wContext method inside my Admin 
>>>>>>> component (copied from the modern movies demo), and also have the body 
>>>>>>> class method.
>>>>>>>   public D2WContext d2wContext() {
>>>>>>>         if (context().page() instanceof D2WPage) {
>>>>>>> D2WPage d2wPage = (D2WPage) context().page();
>>>>>>> return d2wPage.d2wContext();
>>>>>>> }
>>>>>>>         return null;
>>>>>>>   }
>>>>>>> 
>>>>>>> public String bodyClass() {
>>>>>>> String result = null;
>>>>>>> String pageConfig = 
>>>>>>> (String)d2wContext().valueForKey("pageConfiguration");
>>>>>>> if (pageConfig != null && pageConfig.length() > 0) {
>>>>>>> result = pageConfig + "Body";
>>>>>>> }
>>>>>>> return result;
>>>>>>> }
>>>>>>> 
>>>>>>> HTML:
>>>>>>> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
>>>>>>> "http://www.w3.org/TR/html4/loose.dtd";>
>>>>>>> <html>
>>>>>>> <webobject name = "HeadTag">
>>>>>>>    <webobject name = "StyleSheets" />
>>>>>>> </webobject>
>>>>>>> <webobject name = "BodyTag">
>>>>>>> <webobject name = "IsDebug">
>>>>>>>    <div id="ERD2WDebugFlags"><webobject name = "ERD2WDebugFlags" 
>>>>>>> /></div>
>>>>>>> </webobject>
>>>>>>> <div id = "ContentWrapper">
>>>>>>>  <div id = "MenuHeader">
>>>>>>>    <webobject name = "ERXNavigationMenu"/>
>>>>>>>  </div>
>>>>>>>  <div id = "MainContent">     <webobject name = "MainContent" />
>>>>>>>  </div>
>>>>>>> </div>
>>>>>>> <webobject name = "WOLToolBar"/>
>>>>>>> <webobject name = "ERMD2WStyleSheetInjector"/>
>>>>>>> </webobject>
>>>>>>> </html>
>>>>>>> 
>>>>>>> wod:
>>>>>>> 
>>>>>>> ERXNavigationMenu : ERXNavigationMenu {
>>>>>>> navigationContext = navigationContext;
>>>>>>> }
>>>>>>> 
>>>>>>> MainContent : WOComponentContent {
>>>>>>>   _unroll = YES;
>>>>>>> }
>>>>>>> 
>>>>>>> BodyTag : WOBody {
>>>>>>>   class = bodyClass;
>>>>>>> }
>>>>>>> 
>>>>>>> HeadTag : ERD2WHead {
>>>>>>> }
>>>>>>> 
>>>>>>> EntitiesMenu : MenuHeader {
>>>>>>> }
>>>>>>> 
>>>>>>> ERD2WDebugFlags : ERD2WDebugFlags {
>>>>>>>   context = d2wContext;
>>>>>>> }
>>>>>>> 
>>>>>>> IsDebug : WOConditional {
>>>>>>>   condition = application.isDevelopmentMode;
>>>>>>> }
>>>>>>> 
>>>>>>> StyleSheets : ERMD2WCSSReference {
>>>>>>>   localContext = d2wContext;
>>>>>>> }
>>>>>>> 
>>>>>>> WOLToolBar : WOLToolBar {
>>>>>>> expanded = true;
>>>>>>> }
>>>>>>> 
>>>>>>> ERMD2WStyleSheetInjector : ERMD2WStyleSheetInjector {
>>>>>>> localContext = d2wContext;
>>>>>>> }
>>>>>>> 
>>>>>>> 
>>>>>>> I still have the rule in my rule file telling the pageWrapperName to be 
>>>>>>> "Admin"
>>>>>>> 
>>>>>>> Still isn't loading.  I assume there is something else I am missing.  
>>>>>>> (Note I am for now, abandoning doing the subcomponent method.)
>>>>>>> 
>>>>>>> 
>>>>>>> On Jun 9, 2010, at 3:32 PM, David Holt wrote:
>>>>>>> 
>>>>>>>> Hi Andrew,
>>>>>>>> 
>>>>>>>> In order to minimize the work that you need to do, I would consider 
>>>>>>>> rethinking your approach to the admin side. Instead of it opening 
>>>>>>>> inside your AUC, why don't you have the admin link open up a nice full 
>>>>>>>> page completely outside your current pagewrapper with the unchanged 
>>>>>>>> ERModernLook all ready to go?
>>>>>>>> Your admin link will call something like 
>>>>>>>> session.navController.adminAction() (see the ModernMoviesDemo for 
>>>>>>>> examples), and you will include the PageWrapper and MenuHeader from 
>>>>>>>> the example in your application. Then the D2W rule system will find 
>>>>>>>> the pagewrapper, menuheader and skin framework required to make the 
>>>>>>>> complete page. Part of your navigation strategy on the Admin/D2W side 
>>>>>>>> will need to include a link back to reload the "normal" page wrapper.
>>>>>>>> 
>>>>>>>> Once you figure out how D2W ties all this together, it will be easier 
>>>>>>>> to figure out how to frame it within your original strategy.
>>>>>>>> 
>>>>>>>> If you want to go ahead with your current strategy see further notes 
>>>>>>>> below...
>>>>>>>> 
>>>>>>>> Also see David LeBer's responses in the thread from a few weeks ago 
>>>>>>>> which will give you some idea of the complexity involved in the 
>>>>>>>> opposite problem: "embedding standard components into 
>>>>>>>> ERModernDirectToWeb"
>>>>>>>> 
>>>>>>>> On 9-Jun-10, at 11:10 AM, Andrew R. Kinnie wrote:
>>>>>>>> 
>>>>>>>>> Thanks.  I added a rule in the d2wmodel file for pageWrapperName.  
>>>>>>>>> However, I managed to discover several other problems.
>>>>>>>> 
>>>>>>>> The pagewrapper will need to include a call to the D2W context. Every 
>>>>>>>> ERModernLook page needs access to this.
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> My page wrapper was for a non-d2w page and site,
>>>>>>>> 
>>>>>>>> <aside>This is a common misconception. There's really no such thing as 
>>>>>>>> a non-D2W site. You can use as much or as little D2W as you wish. Your 
>>>>>>>> pages are either created by the D2W factory or they're not. Your web 
>>>>>>>> application either includes the D2W frameworks or it doesn't. Those 
>>>>>>>> are the distinctions, rather than "D2W App" or "non-D2W app".</aside>
>>>>>>>> 
>>>>>>>>> and I want the d2w stuff to be a subcomponent of this.  It is very 
>>>>>>>>> simple, I have a header, sidebar navigation, and an 
>>>>>>>>> AjaxUpdateContainer which changes based on what link the user clicks 
>>>>>>>>> on the navigation sidebar.  One of these links is the Admin link, 
>>>>>>>>> which will (I hope) cause the D2W stuff to be loaded into the 
>>>>>>>>> AjaxUpdateContainer, without disturbing anything else.
>>>>>>>> 
>>>>>>>> Your PageWrapper component will need to provide the D2WContext. If you 
>>>>>>>> plan to go with ERModernLook you're going to have to look carefully at 
>>>>>>>> the CSS. I am pretty sure that it also depends on the body class being 
>>>>>>>> in your PageWrapper.
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> I therefore made my Admin component into the "pageWrapperName" for 
>>>>>>>>> the purposes of the D2W rule, and created it based on the pageWrapper 
>>>>>>>>> from ERModernMoviesDemo.
>>>>>>>> 
>>>>>>>> Not sure what you mean here. Is the Admin component included inside 
>>>>>>>> the AUC or is it going to be a page level component?
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 1. I changed it to remove the header because this is a subcomponent.  
>>>>>>>>> However, this removed the stylesheets tag.  I also eliminated the 
>>>>>>>>> bodyTag webobject, again, as this is a subcomponent.  Neither of 
>>>>>>>>> these seem to affect this problem though.
>>>>>>>> 
>>>>>>>> I think that D2W expects whatever component you use for the 
>>>>>>>> PageWrapper to contain the page level HTML. All the D2W page level 
>>>>>>>> components would depend on that. Otherwise what you might be looking 
>>>>>>>> for are the embeddable components (remember that there was a palette 
>>>>>>>> of these things in WOBuilder?).
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> This works, sort of, but the WOLToolbar appears as a ul above the ul 
>>>>>>>>> of the entities.  (I had an error here until I added the WOLips 
>>>>>>>>> framework and password) I assume this is related to the navigation 
>>>>>>>>> panel not being styled properly.
>>>>>>>> 
>>>>>>>> Yeah you're messing with the assumptions that were made in creating 
>>>>>>>> the CSS for ModernLook, I expect. The WOLToolbar is styled to be at 
>>>>>>>> the bottom of the page.
>>>>>>>> 
>>>>>>>>> The real problem is that when I click an entity, now I get an NPE 
>>>>>>>>> error:
>>>>>>>>> 
>>>>>>>>> ERMD2WStyleSheetInjector.java 39      resourceFrameworkName   
>>>>>>>>> er.modern.directtoweb.components
>>>>>>>>> Which apparently means it's not getting the skin framework (and also 
>>>>>>>>> isn't supplying the default of "app")  I added the property to the 
>>>>>>>>> skin framework's properties file (then added it to the app's 
>>>>>>>>> properties too to see if that changed anything.  It didn't.  I assume 
>>>>>>>>> this is related to the missing stylesheets from the head.
>>>>>>>> 
>>>>>>>> This is established by the rules. You've messed with the framework's 
>>>>>>>> assumptions for the styling.
>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 2. I then added the head and body back (along with the bodyClass 
>>>>>>>>> method lifted from the ERModernMoviesDemo's pageWrapper).  I changed 
>>>>>>>>> it from an Ajax link to a regular WOHyperlink and set target = "new" 
>>>>>>>>> but now I get an NPE like this (before I get to the uls from the 
>>>>>>>>> WOLToolbar or the entitities) :
>>>>>>>>> 
>>>>>>>>> ERD2WHead.java        32      displayNameForPageConfiguration 
>>>>>>>>> er.directtoweb.components
>>>>>>>>> 
>>>>>>>>> (Note this also happens inside the AjaxUpdateContainer if I keep it 
>>>>>>>>> as an AjaxUpdateLink with the appropriate containerid)
>>>>>>>> 
>>>>>>>> You can't use the head and body tag nested inside a component that 
>>>>>>>> contains head and body tags (which I am assuming your Main component 
>>>>>>>> does)
> 

 _______________________________________________
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:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

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

Reply via email to